2

至少IE9和IE10有奇怪的行爲。輸入字段的變化和模糊事件不會被觸發

我有四個輸入字段,並訂閱他們的更改事件。我有邏輯,禁用它的變化事件處理程序內的第一個輸入字段。 所以案例: 我在第一個輸入字段中輸入一些值,然後我點擊第二個輸入字段。因爲第一個輸入的結果更改事件處理程序被觸發。所以我的光標在第二個輸入字段裏面,我輸入了一些值。之後,我點擊第三個輸入字段。所以,預期的行爲是第二​​個輸入字段的更改事件驅動程序被觸發,但是,它沒有被解僱。 因此,現在光標位於第三個輸入字段中,我輸入值並單擊第四個字段。結果,第三場的變更事件被激發。

結論:這種行爲我只在IE9 -IE10中複製。沒有在IE8中測試過。在每個輸入字段的Chrome更改處理程序中被觸發。所以可能有人有這種情況? IE中有錯誤嗎?

這裏是鏈接到jsfiddle

HTML

<div id="content"> 
    <div> 
     <label>First field</label> 
     <input type="text" id="one" tabindex="1" /> 
    </div> 
    <div> 
     <label>Second field</label> 
     <input type="text" id="two" tabindex="2" /> 
    </div> 
    <div> 
     <label>Thitd field</label> 
     <input type="text" id="three" tabindex="3" /> 
    </div> 
    <div> 
    <label>Fourth field</label> 
     <input type="text" id="four" tabindex="3" /> 
    </div> 
    <div id="result"> 
    </div> 
</div> 

的Javascript

$('input').on('blur', function (evt) { 
var $input = $(evt.target); 
    var msg = '<div style="color:red;">' + $input.prop('id') + ' field blur event fired. Value is: ' +  $input.val() + '</div>';  
    addMsgToResult(msg); 
}); 

$('#one').on('change', function (evt) { 
    var $input = $(evt.target); 
    addChangeEventMessage($input); 
    $input.prop('disabled', true); 
}); 

$('#two, #three, #four').on('change', function (evt) { 
    var $input = $(evt.target); 
    addChangeEventMessage($input); 
}); 

function addChangeEventMessage($input){ 
    var msg = '<div style="color:blue;">' +$input.prop('id') + ' field change event fired. Value is: ' + $input.val()+ '</div>'; 
    addMsgToResult(msg); 
} 

function addMsgToResult(msg){ 
    $('#result').append(msg); 
    console.log(msg); 
} 
+0

的JS是不一樣的是什麼在你的小提琴中。 – Blazemonger

+0

你爲什麼要設置'$ input = $(evt.target)'而不是'$ input = $(this)'? – Blazemonger

+0

我認爲沒關係。它不會影響結果。 – msevera

回答

0

是啊,這很奇怪。

但封裝第一輸入場的禁止進入這樣的小超時,似乎「解決」的問題:你的問題

setTimeout(function() { $input.prop('disabled', true); }, 1); 

http://jsfiddle.net/45fcF/56/

相關問題