Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
Javascript 在keyup事件中分配click事件处理程序会导致多次触发click事件_Javascript_Jquery_Javascript Events_Event Handling - Fatal编程技术网

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

Javascript 在keyup事件中分配click事件处理程序会导致多次触发click事件,javascript,jquery,javascript-events,event-handling,Javascript,Jquery,Javascript Events,Event Handling,仅当填充了某些表单字段时,我才尝试将事件处理程序添加到锚点,如下所示: $('#newName, #newFrom').keyup(function (e) { if ($('#newName').val() || $('#newFrom').val()) { $('#add-person').click(function (e) { //Handle event, includes adding a row to a table.

仅当填充了某些表单字段时,我才尝试将事件处理程序添加到锚点,如下所示:

$('#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()
另外,您最好使用
输入
事件,而不是
键控
<代码>输入
事件将触发,即使将内容粘贴到您的字段中

尽管如此,我还是会走另一条路:

// (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
上,您都会为按钮分配一个新的(因此是多个)
单击事件,但是(更正为:)
$(this).off()
仅在实际单击按钮后才会触发

另外,使用
.on()
关闭的更好方法。(
(请注意使用
.click()
方法和
.on()
方法的区别)是:


您的问题是否会是
如果($('#newName').val()| |$('#newFrom').val()){
没有检查任何内容?这是在我的表单字段中用这些ID检查非空字符串?这一点似乎很有效。哦,好的。我以前从未见过这样的用法。这确实有效!我很想知道为什么我所做的事情不起作用,即使在更改为这个之后(没有引号-doh!)和输入。@Sam扩展了我的答案;)不确定发生了什么。谢谢你的解释!!
function doCoffee() {
  alert("Bzzzzzzzz...BLURGGUZRGUZRGUZRG");
}

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

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