2009-02-13 5 views
8

Ich habe ein Formular mit einigen ausgewählten Elementen, an denen onChange-Ereignisse angehängt sind. Ich möchte, dass das Ereignis ausgelöst wird, selbst wenn jemand auf die Schaltfläche zum Zurücksetzen des Formulars klickt.Feuert eine Schaltfläche zum Zurücksetzen eines Formulars ein onChange-Ereignis für ausgewählte Elemente ab?

Meine Frage ist: Wird ein Formular zurückgesetzt ein OnceChange -Element Elemente auslösen?

Hier ist ein einfaches Beispiel in jQuery

<script type="text/javascript"> 
    $('.myselect').change(function() { 
     // do something on change 
    }); 
</script> 

<form action="/" method="post"> 
    <select class="myselect" name="select1"> 
     <option value="1">First</option> 
     <option value="2">Second</option> 
    </select> 
    <select class="myselect" name="select2"> 
     <option value="1">First</option> 
     <option value="2">Second</option> 
    </select> 
    <!-- When this is clicked I would like it fire the change event --> 
    <input type="reset" value="Reset" /> 
    <input type="submit" value="Save" /> 
</form> 

Dank!

+1

Wäre es nicht einfacher, dies zu testen? – Powerlord

+1

Ich habe es getestet und es funktioniert nicht. Ich bin mir nicht einmal sicher, ob es möglich ist, deshalb habe ich gefragt. Verengen Sie es auf meinen Fehler oder die Tatsache, dass Sie es einfach nicht tun können. – user22730

+1

@Powerlord Ich muss sagen, ich denke immer "nur testen" ist ein schrecklicher Vorschlag. Das OP wird nur feststellen, ob etwas in seiner/ihrem Browser/Version funktioniert. Eine viel bessere Lösung ist die Einhaltung offizieller Standards/API-Dokumentation. – osullic

Antwort

3

Es gibt einen onreset Tag für Formulare, so dass Sie so etwas wie tun könnten:

<script type="text/javascript"> 
    var changeFunc = function() { 
     // do something on change. 
    }; 
    $('.myselect').change(changeFunc); 
</script> 

<form onReset="changeFunc()" action="/" method="post"> 
    <select class="myselect" name="select1"> 
     <option value="1">First</option> 
     <option value="2">Second</option> 
    </select> 
    <select class="myselect" name="select2"> 
     <option value="1">First</option> 
     <option value="2">Second</option> 
    </select> 
    <!-- When this is clicked I would like it fire the change event --> 
    <input type="reset" value="Reset" /> 
    <input type="submit" value="Save" /> 
</form> 

Diese Methode wird aufgerufen, bevor die Reset geschieht, obwohl so kann es schwierig sein. Ich schätze, du kannst ein "Bist du sicher?" Box. Ein Tossing setTimeout in der Reset-Funktion scheint den Trick zu tun.

2

Jack M.'s Antwort funktioniert gut. Hier ist ein weiterer Ansatz, um das Gleiche zu tun. Ich hoffe, es wird jemandem helfen.

Schreiben Sie Code/Ereignisse, die Sie mitten in dieser Funktion aufrufen wollten. Ich habe das getestet. Arbeitet gut.

$(document).ready(function() { 
    $("input:reset").click(function() {  // apply to reset button's click event 
     this.form.reset();     // reset the form 

     // call your functions to be executed after the reset  

     return false;       // prevent reset button from resetting again 
    }); 
});