我有以下情況。 (A jsfiddle of this can be found here)Javascript文本輸入更改處理程序結合div點擊處理程序
HTML
<div id="container">
<input type="text" id="txtBox" />
<div>
<div class="option">Option 1</div>
<div class="option">Option 2</div>
<div class="option">Option 3</div>
</div>
<div id="out"></div>
</div>
的Javascript(jQuery的)
$(".option").click(function(){
$("#out").append("<br/>clicked " + $(this).html());
$("#txtBox").val($(this).html());
});
$("#txtBox").change(function(){
$("#out").append("<br/>changed value to " + $(this).val());
});
的想法是,用戶可以在文本框中鍵入一個值,或者可替換地選擇一個從選項列表中選擇。使用ajax調用將所選值寫入數據庫,如果用戶輸入值,則會觸發文本框上的更改處理程序,如果單擊某個選項,則會使用click處理程序。
的問題是在下面的步驟:
- 在文本框中鍵入
- 一些隨機值,單擊一個選項
- - >變更處理程序,並單擊處理程序被觸發在一起。
,因爲現在的變化處理程序使用隨機值,這是在文本框中觸發此最後一種情況是非常不可取的,和點擊處理程序使用該選項的HTML屬性觸發。
我想要的只是點擊處理程序的執行和變化處理程序在這種情況下無所作爲(或另一種解決方案在每個可能的用例中只產生一個單一動作的效果。如何處理這個問題?
的變化處理,只要更改焦點從#txtBox路程,#txtBox的內容已經改變執行。無論何時您點擊其中一個選項,#txtBox都會失去焦點,因此如果#txtBox的內容已更改,則更改處理程序將運行。您需要決定何時需要更改處理程序運行。你是否希望它在當前條件下運行,但不是在單擊某個選項時運行? –
這只是一個很常見的例子,當你有一個'blur' /'focusout'事件監聽器,但你希望它根據新的活動元素來做些事情。不幸的是,沒有'relatedTarget'屬性可以提供幫助,比如'mouseout'。 – MaxArt