假设我有一些要将JavaScript操作添加到的链接:
<a class='test'>
<a class='test'>
<a class='test'>
当页面加载时,我给他们所有的click事件:
$('.test').click(function(){
alert("I've been clicked!")
});
但让我们说之后,我添加了另一个元素,但我想给它相同的事件。我不能这样做:
$('.test').click(function(){
alert("I've been clicked!")
});
因为前三个事件将包含两个事件。处理此问题的最佳方法是什么?
您可以将$ .on绑定到这样的dom中始终存在的父元素。
$(document).on('click','.test', function() {
console.log('Test clicked');
});
请注意: 您可以用document
dom中将始终存在的元素的任何父级替换,并且父级越近越好。
具有事件的简单事件绑定click
无法click
将事件处理程序绑定到绑定时dom中已经存在的元素。因此,它不适用于以后通过Ajax或jQuery动态添加到dom中的元素。为此,您必须使用event delegation
。您可以$.on
为此目的使用。
检查$ .on的文档
您可以使用,$.live
但是$ live被折旧了。使用$ .on代替。$ .live和$ .delegate的$ .on等效语法,其作用相同
$(selector).live(events, data, handler); // jQuery 1.3+
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+
$(document).on(events, selector, data, handler); // jQuery 1.7+
在这种情况下,事件处理程序将绑定到document
。在这种情况下,事件将由jQuery委托给目标元素test
。
更新
我建议您将其$.on
用于所有事件处理,因为所有其他方法都是通过方法$.on
和内部$.off
方法进行路由的。
从jQuery源v.1.7.2中检查这些函数的定义
bind: function( types, data, fn ) {
return this.on( types, null, data, fn );
},
unbind: function( types, fn ) {
return this.off( types, null, fn );
},
live: function( types, data, fn ) {
jQuery( this.context ).on( types, this.selector, data, fn );
return this;
},
die: function( types, fn ) {
jQuery( this.context ).off( types, this.selector || "**", fn );
return this;
},
delegate: function( selector, types, data, fn ) {
return this.on( types, selector, data, fn );
},
undelegate: function( selector, types, fn ) {
// ( namespace ) or ( selector, types [, fn] )
return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
}
这些便捷的事件处理程序也是如此
blur focus focusin focusout load resize scroll unload click dblclick mousedown
mouseup mousemove mouseover mouseout mouseenter mouseleave change select
submit keydown keypress keyup error contextmenu
您可以看到所有正在使用的方法$.on
及其$.off
自身。因此,使用$.on
它至少可以保存一个函数调用,尽管在大多数情况下这并不重要。
问题内容: 我具有以下复合组件( ) 在下面的片段中,我想使用以下方式向该组件添加一个 事件: 当我调用Testpage时,出现以下错误: 我该如何解决这个问题? Ajax-Event应该触发UI-Bean-Methode。 谢谢罗纳德 问题答案: 您需要将其注册为Composite界面中的客户端行为。 :您将在Composite的客户端中指定的自定义事件名称。可以与实际事件名称相同。可以定做的。
问题内容: 我试图通过Javascript向表行添加onclick事件。 这在Firefox中可以正常工作,但是在Internet Explorer(IE8)中,我无法访问表格单元。我认为这与onclick函数中的“ this”被标识为“ Window”而不是“ Table”(或类似的东西)有关。 如果我可以访问当前行,则可以在onclick函数中执行,因为我找不到这样做的方法。有什么建议么? 问
问题内容: 我想将点击事件添加到中。我使用了这个例子,并得到了: 但是不幸的是没有任何反应。当我用另一个元素(例如按钮)测试它时,它可以工作: 问题答案: 您可以将点击附加到iframe内容: 注意:这仅在两个页面位于同一域中时才有效。
我们正在使用API Google开发应用程序。在这个过程中,我们遇到了一些困难。 我们使用了php-sdk,在这个页面上“code . Google . com/p/Google-API-PHP-client/”我们使用了谷歌日历服务。我们遵循位于以下位置的文档:“developers . Google . com/Google-apps/calendar/v3/reference/”日历和事件部
问题内容: 我正在尝试使用最新的REST API发布JIRA附件。这是我的代码: 但是,我得到以下回应: 我的本地JIRA实例中确实存在密钥TEST-2的问题,我可以在Jira应用程序本身中“手动”添加附件。我知道我必须添加类型为“ X-Atlassian- Token:nocheck”的标头以防止XSRF,但是从输出来看,我必须做错了什么。令我更加困惑的是,在XSRF检查失败。 我已经在Goog
问题内容: 我一直试图将onclick事件添加到使用JavaScript添加的新元素中。 问题是当我检查document.body.innerHTML时,我实际上可以看到onclick = alert(’blah’)已添加到新元素中。 但是,当我单击该元素时,我看不到警报框正在运行。实际上,任何与JavaScript相关的功能都无法正常工作。 这是我用来添加新元素的方法: 这是我所谓的函数: