繁体   English   中英

在 keyup 事件中分配 click 事件处理程序会导致多次触发 click 事件

[英]Assigning click event handler inside keyup event causes the click event to be fired multiple times

我试图仅在填充某些表单字段时向锚点添加事件处理程序,如下所示:

$('#newName, #newFrom').keyup(function (e) {
    if ($('#newName').val() || $('#newFrom').val()) {
        $('#add-person').click(function (e) {
            //Handle event, includes adding a row to a table.
            $('this').off();
        });
    }
});

似乎第一个事件正在传播到第二个事件,因为我的表中的行数与我键入的键数相同。

我试过添加

    e.stopPropagation();

但没有成功。

$('this').off(); 应该是$(this).off();
也可能你最好使用input事件而不是keyup 即使将内容粘贴到您的字段中, input事件也会触发。

尽管如此,我还是会反其道而行之:

// (cache your selectors)
var $newName = $("#newName"),
    $newFrom = $("#newFrom");

// create a boolean flag
var haveNewValue = false;

// modify that flag on fields `input`
$newName.add( $newFrom ).on("input", function() {
  haveNewValue = ($.trim($newName.val()) + $.trim($newFrom.val())).length > 0;
});

// than inside the click test your flag
$('#add-person').click(function (e) {
  if(!haveNewValue) return; // exit function if no entered value.

  // do stuff like adding row to table
});

哪里错了:

keyup你被分配一个新的(因此多个) click事件/ s到该按钮,但(更正为:) $(this).off()只是一个实际的按钮,点击后触发。

还更好的方法来使用.on()off.()通知的差在使用.click()方法和.on()方法)是:

function doCoffee() {
  alert("Bzzzzzzzz...BLURGGUZRGUZRGUZRG");
}

$("#doCoffeeButton").on("click", doCoffee); // Register "event" using .on()

$("#bossAlertButton").click(function() {
   $("#doCoffeeButton").off("click");       // Turn off "event" using .off()
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM