2012-09-13 96 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() ...