Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在事件处理程序中模拟jQuery行为的简单Javascript_Javascript_Events_Event Handling_This_Dom Events - Fatal编程技术网

在事件处理程序中模拟jQuery行为的简单Javascript

在事件处理程序中模拟jQuery行为的简单Javascript,javascript,events,event-handling,this,dom-events,Javascript,Events,Event Handling,This,Dom Events,这不是关于jQuery的问题,而是关于jQuery如何实现这种行为的问题 在jQuery中,可以执行以下操作: $('#some_link_id').click(function() { alert(this.tagName); //displays 'A' }) 有人可以用一般术语解释一下(无需编写代码)他们是如何将事件的调用者html元素(本特定示例中的链接)传递到this关键字的 显然,我试图在jQuery代码中查找第一行,但我一行都听不懂 谢谢 更新: 根据Anurag的回答,

这不是关于jQuery的问题,而是关于jQuery如何实现这种行为的问题

在jQuery中,可以执行以下操作:

$('#some_link_id').click(function() 
{
   alert(this.tagName); //displays 'A'
})
有人可以用一般术语解释一下(无需编写代码)他们是如何将事件的调用者html元素(本特定示例中的链接)传递到this关键字的

显然,我试图在jQuery代码中查找第一行,但我一行都听不懂

谢谢

更新: 根据Anurag的回答,我决定在这一点上发布一些代码,因为它似乎比我想象的更容易编码:

function AddEvent(html_element, event_name, event_function)
{      
   if(html_element.attachEvent) //IE
      html_element.attachEvent("on" + event_name, function() {event_function.call(html_element);});
   else if(html_element.addEventListener) //FF
      html_element.addEventListener(event_name, event_function, false); //don't need the 'call' trick because in FF everything already works in the right way         
}
现在通过一个简单的调用,我们模拟了在事件处理程序中使用jQuery的行为

AddEvent(document.getElementById('some_id'), 'click', function()
{            
   alert(this.tagName); //shows 'A', and it's cross browser: works both IE and FF
}); 

你认为有什么错误或我误解的东西吗?

在Javascript中,你可以通过编程调用函数,告诉它这个应该指什么,并使用
函数
中的
调用
应用
方法向其传递一些参数。函数在Javascript中也是一个对象

jQuery迭代其结果中的每个匹配元素,并在该对象(在您的示例中)上调用
click
函数,将元素本身作为上下文或该在该函数中引用的内容传递

例如:

function alertElementText() {
    alert(this.text());
}
这将调用上下文(This)对象上的text函数,并警告其值。现在我们可以调用该函数,并将上下文(this)设置为jQuery包装的元素(这样我们就可以直接调用
this
,而不必使用
$(this)


嗯……那看起来很简单。我根据你的答案更新了问题,我想听听你的反馈。FF看起来不错,很久没有写过IE特定的事件处理,但如果它有效,那么一切都很好!:)
<a id="someA">some text</a>
alertElementText.call($("#someA")); // should alert "some text"
document.getElementById("someId").onclick = function() {
    // this refers to #someId here
}