2010-02-11 10 views
44

我已經制定了以下的jQuery代碼我的網頁上:jQuery的textbox.val( 'XXXX')不引起改變火?

var isChanged = false; 
$(document).ready(function() 
{ 
    $('.change').change(function() { 
     isChanged = true; 
    }); 
}); 

我使用的修改文本框中它與使用的價值plugic:

target.val('xxxx'); 

文本框中在HTML(從asp.net)是:

<input name="ctl00$cphHolder1$rptFlex$ctl01$txtLeftRank" 
    type="text" 
    value="52°" 
    id="ctl00_cphHolder1_rptFlex_ctl01_txtLeftRank" 
    class="change atiselector" /> 

當文本框的值使用代碼更改,更改不會開火。如果我輸入文本框,則更改會觸發。我錯過了什麼?

回答

72

這是它的工作方式。

$('input#whatever').val('hi').change(); 
+2

+1絕對正確。 – 2010-02-11 21:22:37

+0

有史以來最愚蠢的事情之一。試圖修補val()以使其行爲合理 – 2014-03-04 18:36:05

+4

@AndrewBullock,如果你實現了這個「明智」的補丁,你很可能會發現它顯着降低了你的應用程序的性能。 – NobodyMan 2015-05-16 03:06:40

4

$('.change').change()將觸發事件。只是改變屬性不會觸發事件。

2

根據DOM Level 2 Event Specification:如果您需要的值的變化觸發了「改變」事件,你可以明確地這樣做

當控件失去輸入焦點發生變化事件並且自從獲得關注以來其價值已被修改。

這意味着更改事件旨在通過用戶交互觸發更改。程序化更改不會導致此事件被觸發。