2009-04-09 8 views
10

das Problem, das ich bin vor der Veränderung dieser:Anruf Javascript onchange Ereignis von programatically ist Textbox Wert

  • ich an der Seite ein Kalendersteuerelement ein Textfeld für einen Datumsbereich haben.
  • Wenn der Benutzer ein Datum aus dem Kalender auswählt, füllt es dieses Datum in das Textfeld
  • Wenn dies passiert, möchte ich eine JavaScript-Funktion auslösen, jedoch scheint das "onchange" -Ereignis nicht zu passieren.

Ich würde im Idealfall in der Lage sein wie das Ereignis als Attribut in das Textfeld hinzuzufügen, so etwas wie:

txtCreateDate.Attributes.Add("onchange", string.Format("JSfunction({0},'{1}');", arg1, arg2)); 

Dank im Voraus

weiteren Informationen: Das eingegebene Datum ist in das Textfeld in C#. Das Kalendersteuerelement verfügt über einen Eventhandler auf der Seite. Wenn ein Datum ausgewählt ist, legt der Eventhandler das Datum in das Textfeld ein. Ich habe versucht, den Fokus auf die Textbox an diesem Punkt zu setzen und dann ein onBlur-Attribut in das Textfeld zu setzen, aber das Textfeld scheint nie den Fokus zu bekommen.

Ich könnte die JavaScript-Funktion an dieser Stelle direkt aufrufen, indem ich ClientScript.RegisterClientScriptBlock oder so ähnlich mache, aber das scheint schlampig zu sein und funktioniert nie so, wie ich es möchte.

Antwort

7

Sie interpretieren falsch, was das onchange-Ereignis bewirkt, wenn es auf einen Textbereich angewendet wird. Es wird nicht ausgelöst, bis es den Fokus verliert oder du Enter drückst. Warum feuern Sie nicht die Funktion von einer onchange auf der Auswahl, die den Textbereich ausfüllt?

prüft für mehr heraus auf dem onchange Ereignisse: w3schools

2

Onchange wird nur ausgelöst, wenn der Benutzer etwas über die Tastatur eingibt. Ein mögliches Workarround könnte sein, zuerst das Textfeld zu fokussieren und dann zu ändern.

Aber warum nicht das Ereignis abrufen, wenn der Benutzer auf ein Datum klickt? Dort muss schon etwas Javascript sein.

+0

Das Datum wird in der Txtbox mit C#, nicht Javascript festgelegt. Ich habe versucht, den Fokus auf die Textbox an diesem Punkt zu setzen und das onBlur-Ereignis zu verwenden, aber die Textbox scheint nie den Fokus richtig zu bekommen. –

+0

@ Matthew - Das ergibt keinen Sinn. Wenn das Datum auf der Serverseite festgelegt ist, welches Problem haben Sie dann beim Onchange-Ereignis, wenn Sie sich bereits auf dem Server innerhalb einer Funktion befinden? – TStamper

-4

Die „onchange“ nur ausgelöst, wenn das Attribut programmatisch geändert wird oder wenn der Benutzer eine Änderung vornimmt und dann konzentriert sie aus dem Feld entfernt.

Haben Sie sich das YUI-Kalenderobjekt angeschaut? Ich habe eine Lösung programmiert, die den yui-Kalender in ein yui-Feld einfügt und das Feld ausblendet, bis ein zugehöriges Bild angeklickt wird. Ich kann Änderungen von beiden sehen.

http://developer.yahoo.com/yui/examples/calendar/formtxt.html

+5

Das onchange-Ereignis wird nicht ausgelöst, wenn der Wert für eine Eingabe programmgesteuert geändert wird. –

7

Sie das Ereignis einfach mit

 
document.getElementById("elementID").onchange(); 

Ich weiß nicht, wenn dies nicht funktioniert auf einigen Browsern, aber es sollte auf Arbeit FF 3 und IE 7+

+0

Ich muss dies von C#, nicht Javascript tun. –

+0

@ matthew_360: Sie können von C# kein JavaScript-Ereignis aufrufen/initiieren. – palswim

1

Sie feuern Die Bevölkerung stammt von der Server-Seite. Wenn Sie das registerclientscript verwenden, wird das Skript an den Anfang des Formulars gesetzt. Sie sollten RegisterStartupScript (Block) verwenden, um das Skript am Ende der betreffenden Seite platzieren zu lassen.

Die erste versucht das Skript auszuführen, bevor der Textbereich in der Domäne vorhanden ist, die letztere wird das Skript ausführen, nachdem das Element in der Seite erstellt wurde.

18

Dies ist eine alte Frage, und ich bin mir nicht sicher, ob es helfen, aber ich habe in der Lage programmatisch ein Ereignis ausgelöst:

if (document.createEvent && ctrl.dispatchEvent) { 
    var evt = document.createEvent("HTMLEvents"); 
    evt.initEvent("change", true, true); 
    ctrl.dispatchEvent(evt); // for DOM-compliant browsers 
} else if (ctrl.fireEvent) { 
    ctrl.fireEvent("onchange"); // for IE 
} 
+1

Obwohl Ihr Kommentar alt ist, hat es heute meinen Tag gerettet :) Danke! Eine kleine Bemerkung, ich würde die Reihenfolge der Checks rückgängig machen, IE 9 unterstützt die Dispatch-Funktion, daher wäre es besser zuerst nach der DOM-kompatiblen Version zu suchen und wenn das nicht in den IE-Modus zurückfällt, erzwingt dies neue Browser (wie IE 9), um die neueren (und kompatiblen) Techniken zu verwenden. – Gertjan

0

Sie es in einer anderen Klasse setzen und dann rufe eine Funktion auf. Dies funktioniert, wenn ajax refresh

$(document).on("change", ".inputQty", function(e) { 

//Call a function(input,input); 
}); 
Verwandte Themen