2012-09-13 100 views
9

有此示例代码:Jquery。点击事件在更改事件后不起作用?

<input type="text" id="changeid"> 
<a href="#" id="clickb">click</a> 

<script> 
    $('#clickb').on("click", function(event){ 
     alert(1);        
     return false; 
    }); 

    $('#changeid').on("change", function(event){ 
     alert(2);        
     return false; 
    }); 
</script> 

将东西当到文本字段并立即点击链接,只是onchange事件触发,但不链接点击事件。 这是为什么? 看来,更改事件阻止点击事件?

回答

4

当您编辑输入,然后点击下面发生的链接在里面

  1. 你开始点击“链接”上。没有什么事件,但(甚至没有的mousedown)产生的,因为第一个浏览器会做一些清理工作:
  2. 输入失去焦点,并会提出一个blur事件
  3. 输入引发了change事件,因为它提出了一个blur和值改变
  4. change事件回调打开一个alert(2)
  5. 的文件失去焦点,因为一个新的窗口出现
  6. 的链接永远不会体验到click

解决方案是不使用alert(如xdazz建议)。

+0

来到这里有同样的问题,但不同的先决条件。值得注意的是,使用脚本调试器来突出显示更改和单击事件时,同样的解释正在起作用 – KyleMit

11

它被alert阻止。将alert更改为console.log,您会发现两个事件全部被触发。

The demo.

$('#clickb').on("click", function(event){ 
    console.log(1); 
    return false; 
}); 

$('#changeid').on("change", function(event){ 
    console.log(2);        
    return false; 
});​ 
+0

+1了工作演示。发现得好。 – Nope

0

onchange事件仅在元素模糊后才会触发。所以当你输入一些文字并点击链接时,文本框中的元素会变得模糊。使用onkeyup事件来跟踪文本字段所做更改的最佳方式。

1

使用本

$("#changeid").live('change', function() ...