2011-04-15 39 views
2

我有文本輸入和一個按鈕輸入。當onchange接管時,我該如何回到原始事件?

Textbox有一個onchange eventhander,該按鈕有一個click事件處理程序。

在隔離兩個工作正常。但是,當我更改文本框中的某些文本並單擊該按鈕時,onchange事件首先觸發並阻止點擊發射。

如何在onchange之後繼續點擊click事件?或者至少弄清楚在交換中引起事件的原因是什麼?

這裏的jsfiddle例如:http://jsfiddle.net/4mQPe/

感謝

+0

它爲我的罰款。 – alex 2011-04-15 02:54:57

+3

使用此[fork](http://jsfiddle.net/Khez/YGPAv/)我似乎無法重現錯誤。沒有使用警報(因爲這些塊執行afaik)。 – Khez 2011-04-15 02:56:14

回答

1

有趣的問題 - 這可能不是很明顯,但「阻止」事件的原因是因爲它永遠不會發生。這是因爲更改事件觸發了您在該字段外單擊,並且即使您單擊該按鈕(看起來像您單擊該按鈕),它永遠不會發生(因爲警報框會阻止它)。

Inputbox的defaultValues可以合理地利用它更改輸入更改時的默認值。下面的例子可以解決你的問題。

$(function(){ 
    $('#button').bind("click",function(){  
     if($('#textbox').attr('defaultValue') != $('#textbox').val()) { 
      alert("button clicked and value changed"); 
      $('#textbox').attr('defaultValue', $('#textbox').val()); 
     } else { 
      alert("button clicked and value not changed") 
     }; 
     }); 
}); 

另外,如果您還需要更改事件只是沒有一個警告框

<input type="text" id="textbox"/><br/> 
<input type="button" id="button"/> 

<div id='container'></div> 



$(function(){ 
    $('#button').bind("click",function(){ 
      alert("button click"); 
     }); 
$('#textbox').bind("change",function(){ 
    //alert("text changed"); 
    $('#container').html("changed!"); 
}); 

}); 
相關問題