2013-11-27 141 views
0

我正在使用JavaScript庫,偶爾會更改輸入字段的值。我想檢測到這種情況。當輸入字段的值發生變化時會觸發什麼事件?

顯然,當輸入字段的值發生變化時(至少在Chrome上不會觸發),「更改」和「輸入」事件不會被觸發。

爲了驗證,我已經試過這(使用JQuery):

<script> 
    $(function() { 
     $('#inp').on('change',function() { console.log('change event'); }); 
     $('#inp').on('input',function() { console.log('input event'); }); 
     $('#inp').val('hello'); 
    }); 
</script> 
<input type="text" id="inp"> 

既不是變化的事件,也沒有輸入事件時,我打電話.val('hello')被觸發。

如何檢測更改? (請記住,更改該值的代碼超出了我的控制範圍,因此我無法在此處添加對trigger()的呼叫。)

+0

我認爲這是一個問題 –

+0

呢'element.onchange();'由外部腳本解僱?用'addEventListener'函數嘗試舊的方式。 – TCHdvlp

+0

我試過'addEventListener'。它沒有幫助。 – oz1cz

回答

2

有一種解決方法,您可以在定期間隔後彙集文本框的值並觸發事件當它改變時。

Live Demo

$('#elementId').change(function(){ 
    alert("changed"); 
}); 

var previousVal = ""; 
function InputChangeListener() 
{ 
    if($('#elementId').val() != previousVal) 
    { 
    previousVal = $('#elementId').val(); 
    $('#elementId').change();  
    } 
} 

setInterval(InputChangeListener, 500); 

$('#elementId').val(3); 

編輯基於許多因素的意見。

您可以使用陣列和顯示器,30元不會成爲一個性能問題

Live Demo

$('.someclass').change(function(){ 
    alert("changed, id >> " + this.id); 
}); 

var hashTablePrevElem=[]; 
$('.someclass').each(function(){ 
    hashTablePrevElem[this.id] = this.value; 
}); 

function InputChangeListener() 
{  
    $('.someclass').each(function(){ 
     if(hashTablePrevElem[this.id] != this.value) 
     { 
     hashTablePrevElem[this.id] = this.value; 
     $(this).change();  
     } 
    }); 
} 
在這種情況下
+0

是的,這可能是唯一的方法。但我需要監視大約30個輸入字段。我不知道多少次性能問題將會反覆調查他們的價值。 – oz1cz

+0

使用數組可以簡化和快速。 – Adil

+0

我做了十個元素的演示,檢查我更新的答案,我希望它不會被性能打擊。 – Adil

相關問題