在事件处理程序中模拟jQuery行为的简单Javascript
这不是关于jQuery的问题,而是关于jQuery如何实现这种行为的问题 在jQuery中,可以执行以下操作:在事件处理程序中模拟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的回答,
$('#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
}