2010-02-11 2 views
44

Ich habe folgende jQuery-Code an seinem Platz auf meiner Seite:jQuery textbox.val ('xxxx') verursacht keine Feueränderung?

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

ich plugic bin mit, die den Wert des Textfeldes ändert es um die Verwendung verbunden:

target.val('xxxx'); 

das Textfeld in dem hTML-Code (von asp.net) ist:

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

Wenn der Wert des Textfeldes wird unter Verwendung von Code geändert, wird die Änderung nicht feuern. Wenn ich das Textfeld eintippe, wird die Änderung ausgelöst. Was vermisse ich?

Antwort

72

So funktioniert es. Wenn Sie die Änderung des Wertes müssen die „Änderung“ Ereignis auslösen, können Sie explizit tun, indem sie:

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

+1 Absolut richtig. –

+0

Eines der dümmsten Dinge aller Zeiten. Versucht, val() zu patchern, damit es sich vernünftig verhält –

+4

@AndrewBullock und wenn Sie diesen "vernünftigen" Patch implementiert haben, würden Sie wahrscheinlich feststellen, dass er die Leistung Ihrer App erheblich verschlechtert. – NobodyMan

4

$('.change').change() wird das Ereignis ausgelöst. Wenn Sie nur die Attribute ändern, wird das Ereignis nicht ausgelöst.

2

Nach DOM Level 2 Event Specification:

Das Änderungsereignis tritt auf, wenn ein Steuerelement den Eingabefokus verliert und sein Wert wurde seit dem Fokussieren geändert.

Das bedeutet, dass Änderungsereignis auf Änderung durch Benutzerinteraktion ausgelöst wird. Programmatische Änderungen führen nicht dazu, dass dieses Ereignis ausgelöst wird.

Verwandte Themen