Jquery “on”并将其附加到要触发此操作的元素。 第一个参数是“事件处理程序”,第二个参数是元素,第三个参数是函数。 例如: $("body").delegate('.test', 'click', function(){ ... alert('test'); });

Jquery “on”并将其附加到要触发此操作的元素。 第一个参数是“事件处理程序”,第二个参数是元素,第三个参数是函数。 例如: $("body").delegate('.test', 'click', function(){ ... alert('test'); });,jquery,events,Jquery,Events,为什么? 回答:事件处理程序仅绑定到当前选定的元素;在代码调用.on()时,它们必须存在于页面上。要确保元素存在并且可以选择,请在页面上HTML标记中的元素的文档就绪处理程序中执行事件绑定。如果将新HTML注入页面,请在将新HTML放入页面后选择元素并附加事件处理程序。或者,使用委派事件附加事件处理程序,如下所述。。。 链接: 另一种更简洁的替代方法(IMHO)是使用响应点击事件的原始javascript函数,然后如果愿意,将目标元素传递回jQuery。这种方法的优点是,您可以在任何地方动态添加

为什么?

回答:事件处理程序仅绑定到当前选定的元素;在代码调用.on()时,它们必须存在于页面上。要确保元素存在并且可以选择,请在页面上HTML标记中的元素的文档就绪处理程序中执行事件绑定。如果将新HTML注入页面,请在将新HTML放入页面后选择元素并附加事件处理程序。或者,使用委派事件附加事件处理程序,如下所述。。。 链接:

另一种更简洁的替代方法(IMHO)是使用响应点击事件的原始javascript函数,然后如果愿意,将目标元素传递回jQuery。这种方法的优点是,您可以在任何地方动态添加元素,单击处理程序将“正常工作”,您不必担心将控制权委托给父元素等等。

步骤1:更新动态html以触发onclick事件。确保将“event”对象作为参数传递

$(“按钮”)。单击(函数(){ $(“h2”).html(

单击我

) }); 步骤2:创建测试函数以响应单击事件

功能测试(e){ 警惕(); }); 可选步骤3:如果您正在使用jQuery,我假设返回到source按钮的引用会很有用

功能测试(e){ 警惕(); //获取对按钮的引用 //这一行的解释是可用的 var target=(e.target)?e.target:e.src元素; //将按钮引用传递给jQuery以执行jQuery魔术 变量$btn=$(目标); });
我无法在lightbox(tinybox)中的div上进行实时或委派工作

我通过以下简单的方式成功地使用了setTimeout:

function test(e){ alert(); // Get a reference to the button // An explanation of this line is available here var target = (e.target)? e.target : e.srcElement; // Pass the button reference to jQuery to do jQuery magic var $btn = $(target); });
$('#displayContact')。单击(函数(){
show({html:'Submit',close:true});
setTimeout(setContactClick,1000);
})
函数setContactClick(){
$('#contactSubmit')。单击(函数(){
警报($('#contactText').val());
})
}

使用委派对动态生成的内容应用事件的最佳方法

$('#displayContact').click(function() {
    TINY.box.show({html:'<form><textarea id="contactText"></textarea><div id="contactSubmit">Submit</div></form>', close:true});
    setTimeout(setContactClick, 1000);
})

function setContactClick() {
    $('#contactSubmit').click(function() {
        alert($('#contactText').val());
    })
}
所以你的代码现在是这样的

$(document).on("eventname","selector",function(){
    // code goes here
});

原因:

$(document).on("click",".test",function(){
    // code goes here
});
在jQuery中,Click()事件仅当Html代码中存在特定元素时(页面加载后)才会绑定该元素

<>它不会考虑动态创建的未来元素(未来元素)。 动态元素是在javascript或jquery(非Html)的帮助下创建的

因此,正常的单击事件不会在动态元素上触发

解决方案:

$(document).on("click",".test",function(){
    // code goes here
});
为了克服这个问题,我们应该使用on()函数on()可以为当前和将来的元素委派事件

delegate()、live()和on()函数与DOM元素相比具有优势

delegate()和live()不推荐使用(不要使用它们)

on只能触发现有和未来元素

<强> < <强> >可以考虑整个页面上存在的所有元素。

您应该使用on函数在动态(未来)创建的元素上触发事件

从$(文档)中删除代码。准备就绪:

$(document).on("click",".test",function(){
    // code goes here
});
改为:

$(".test").click(function(){

  alert();

});

可以在单击时添加动态创建的图元。下面的例子。使用“何时”来确保其完成。在我的示例中,我使用expand类抓取一个div,添加一个“单击以查看更多”span,然后使用该span隐藏/显示原始div

$(document).on('click','.test',function(){

  alert('Clicked');

});
$.when($(“.expand”)。before(“单击查看更多”)。然后(function(){
$(“.clickActivate”)。单击(函数(){
$(this.next().toggle();
})
});

如果您有一个指向某个容器或主体的链接:

$.when($(".expand").before("<span class='clickActivate'>Click to see more</span>")).then(function(){
    $(".clickActivate").click(function(){
        $(this).next().toggle();
    })
});
无论您添加了多少次这个新链接实例,您都可以像使用jquery
单击
函数一样使用它

newLink.get(0).addEventListener("click", doActionFunction);
所以你会收到一条信息,说

没关系

它比其他替代品具有更好的性能

Extra:避免jquery和使用普通javascript可以获得更好的性能。如果您正在使用IE版本8之前的版本,则应使用此polyfill来使用方法
addEventListener

function doActionFunction(e) {
    e.preventDefault();
    e.stopPropagation();

    alert($(this).html());
}

此外,您还可以在元素内部使用
onclick=“do_something(this)”
在单击绑定到已存在的元素时使用“on”

例如

if (typeof Element.prototype.addEventListener === 'undefined') {
    Element.prototype.addEventListener = function (e, callback) {
      e = 'on' + e;
      return this.attachEvent(e, callback);
    };
  }

这将有所帮助。

尝试使用。它将一个新id注册到DOM中,jQuery可以访问该id,而没有。注意:您不能将放入有效的HTML中。这里有一篇关于如何为动态元素绑定click事件的详细文章。从jQuery 1.7开始,该视频就提供了帮助。
.live()
方法已被弃用。使用
.on()
附加事件处理程序。它必须是
$(文档)。on('click','.test',function()){
或绑定到某个其他父级以与
相等。live
只是说,因为它出现在最近的@BlakePlumb中:我查看了jQuery文档;你是对的!我将更新我的答案。感谢你的提示!抱歉我迟到了,但如果“.on”与“.click”的工作原理相同,但使用dynamic cont有额外的好处那么我为什么要使用.click?我不应该养成总是使用的习惯吗?@ModusPwnens:初始选择器
$(“.test”)
必须是
on()
中指定为第二个参数的选择器的父级。或者,如
on()的文档中指定的那样
,第二个参数选择器必须是父选择器的后代。Th $("button").click(function() { $("h2").html("<p class='test' onclick='test(event)'> click me </p>") }); function test(e){ alert(); }); function test(e){ alert(); // Get a reference to the button // An explanation of this line is available here var target = (e.target)? e.target : e.srcElement; // Pass the button reference to jQuery to do jQuery magic var $btn = $(target); });
$('#displayContact').click(function() {
    TINY.box.show({html:'<form><textarea id="contactText"></textarea><div id="contactSubmit">Submit</div></form>', close:true});
    setTimeout(setContactClick, 1000);
})

function setContactClick() {
    $('#contactSubmit').click(function() {
        alert($('#contactText').val());
    })
}
$(document).on("eventname","selector",function(){
    // code goes here
});
$(document).on("click",".test",function(){
    // code goes here
});
$(".test").click(function(){

  alert();

});
$(document).on('click','.test',function(){

  alert('Clicked');

});
$.when($(".expand").before("<span class='clickActivate'>Click to see more</span>")).then(function(){
    $(".clickActivate").click(function(){
        $(this).next().toggle();
    })
});
var newLink= $("<a></a>", {
        "id": "approve-ctrl",
        "href": "#approve",
        "class": "status-ctrl",
        "data-attributes": "DATA"
    }).html("Its ok").appendTo(document.body);
newLink.get(0).addEventListener("click", doActionFunction);
function doActionFunction(e) {
    e.preventDefault();
    e.stopPropagation();

    alert($(this).html());
}
if (typeof Element.prototype.addEventListener === 'undefined') {
    Element.prototype.addEventListener = function (e, callback) {
      e = 'on' + e;
      return this.attachEvent(e, callback);
    };
  }
$('test').on('click',function(){
    alert('Test');
})