2014-10-22 114 views
4

我們有一種情況下,您更喜歡只有當您離開輸入字段時觸發的事件。這是因爲該事件導致「回發」,如ajax請求,後者又更新輸入字段。更改事件將啓動無限循環。jQuery變化和然後模糊事件

另一方面,每次用戶離開字段時都會觸發模糊事件,而不管該字段是否已更改。

我所尋找的是怎樣的一個「轉換和再模糊」事件,觸發如果領域的改變,但只有當留(模糊)的。

我認爲jQuery並沒有開箱即用。有沒有簡單的方法來擴展它呢?

更新 - 我只是努力重現在一個簡單的jsfiddle無限循環的問題 - 無濟於事。

有淘汰賽涉及以及jQuery autoNumeric和自定義autoNumeric敲除綁定。這些值使用ko.mapping進行更新。但即使包括所有這些我的jsfiddle似乎完美工作與簡單的jQuery change事件:http://jsfiddle.net/a1tbxnpp/

所以我想我會調查問題與我的應用程序,麻煩引入另一個jQuery事件。

+0

我完全不理解你的問題......如果你想確定這些字段沒有被關注,只檢查它是否被集中,那麼只會調用一次更改事件... http://api.jquery.com/焦點選擇器/但變化事件主要發生在場模糊的情況下。 – Loenix 2014-10-22 11:37:19

+0

@Loenix - 你是完全正確的。我更新了我的問題。我不能「撤銷」它,因爲它已經有了答案。我也不能立即關閉它。 – chiccodoro 2014-10-22 12:18:53

+0

請檢查此出[http://stackoverflow.com/questions/16710227/intercept-value-changes-within-blur-event](http://stackoverflow.com/questions/16710227/intercept-value-changes-within -blur-event) – 2016-12-13 12:01:37

回答

2

爲什麼不使用焦點和模糊。在焦點上將輸入字段的值保存在變量中。模糊比較輸入與變量的值,如果不同,請執行ajax調用。

+0

來自我的相當晚的upvote :-) – chiccodoro 2015-11-24 16:22:13

1

嗯...回答我的問題,我剛纔已經嘗試了以下,似乎擺在首位的工作:

$(":input").each(function() { 
    var $el = $(this), 
     oldValue = $el.val(); 

    $el.focus(function() { 
     oldValue = $el.val(); 
    }); 

    $el.blur(function() { 
     var newValue = $el.val(); 
     if (oldValue != newValue) { 
      $el.trigger('changeblur'); 
     } 
    }); 
}); 

我想有沒有簡單的答案比...

+0

這是有效的,但對於在飛行中創建的元素,我們必須做類似這樣的操作:var inputOldValue; $('body')。on('focus','input,textarea,select',function(){inputOldValue = $(this).val();}); $('body')。on('blur','input,textarea,select',function(){if(inputOldValue!= $(this).val()){$(this).trigger('changeBlur' );}});'我在這裏使用input,textarea,select'來代替':input'',因爲前者比後者快。 – artificis 2016-01-21 12:44:21