2009-04-09 12 views
10

il problema che sto affrontando è questa:chiamata JavaScript evento onchange per programatically modificando il valore di testo

  • ho una casella di testo per un intervallo di date lungo il lato un controllo calendario.
  • Quando l'utente seleziona una data dal calendario, inserisce quella data nella casella di testo
  • Quando ciò accade, desidero attivare una funzione javascript, tuttavia, l'evento "onchange" non sembra avvenire.

Vorrei idealmente piace essere in grado di aggiungere l'evento come un attributo alla casella di testo, qualcosa di simile:

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

grazie in anticipo

maggiori informazioni: si indicherà la data nella casella di testo in C#. Il controllo del calendario ha un eventhandler sulla pagina. Quando viene selezionata una data, l'eventhandler inserisce la data nella casella di testo. Ho provato a mettere a fuoco la casella di testo a questo punto, quindi a mettere un attributo onBlur sulla casella di testo, ma la casella di testo non sembra mai focalizzarsi.

Suppongo che potrei chiamare direttamente la funzione javascript a questo punto facendo ClientScript.RegisterClientScriptBlock o qualcosa del genere, ma che sembra sciatto e non funziona mai come lo voglio.

risposta

7

Stai interpretando erroneamente cosa fa l'evento onchange quando viene applicato a una textarea. Non sparerà finché non perde il fuoco o premi Invio. Perché non attivare la funzione da un onchange sulla selezione che riempie l'area di testo?

Partenza qui per più sull'evento onchange: w3schools

2

Onchange viene attivato solo quando l'utente inserisce qualcosa tramite tastiera. A possibile workarround potrebbe essere quello di focalizzare prima il campo di testo e quindi modificarlo.

Ma perché non recuperare l'evento quando l'utente fa clic su una data? Ci deve già essere un javascript.

+0

La data è impostata nel txtbox utilizzando C#, non javascript. Ho provato a mettere a fuoco la casella di testo in quel punto e ad usare l'evento onBlur, ma la casella di testo non sembra mai mettere a fuoco correttamente. –

+0

@ Matthew-Questo non ha senso. se la data è impostata sul lato server, quale problema hai chiamato sull'evento Onchange se sei già sul server all'interno di una funzione? – TStamper

-4

Il "onchange" viene sparato solo quando l'attributo è cambiato a livello di codice o quando l'utente effettua una modifica e poi si concentra lontano dal campo.

Hai guardato usando l'oggetto calendario YUI? Ho codificato una soluzione che mette il calendario yui all'interno di un pannello yui e nasconde il pannello fino a quando non viene cliccata un'immagine associata. Sono in grado di vedere i cambiamenti da entrambi.

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

+5

L'evento onchange NON verrà attivato quando si modifica il valore di un input a livello di programmazione. –

7

Si può sparare l'evento semplicemente con

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

Non so se questo non funziona su alcuni browser, ma dovrebbe funzionare su FF 3 e IE 7+

+0

ho bisogno di fare questo da C#, non javascript. –

+0

@ matthew_360: non è possibile chiamare/avviare un evento JavaScript da C#. – palswim

1

È la popolazione è dal lato server. Utilizzando registerclientscript, lo script verrà inserito all'inizio del modulo. Ti consigliamo di utilizzare RegisterStartupScript (Block) per inserire lo script alla fine della pagina in questione.

Il primo tenta di eseguire lo script prima che l'area di testo esista nel dom, quest'ultimo eseguirà lo script dopo che l'elemento nella pagina è stato creato.

18

Questa è una vecchia questione, e non sono sicuro se vi aiuterà, ma sono stato in grado di sparare programatically un evento utilizzando:

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

Anche se il tuo commento è vecchio, mi ha salvato la giornata oggi :) Grazie! Una piccola osservazione, vorrei invertire l'ordine dei controlli, IE 9 supporta la funzione di invio in modo che sarebbe meglio prima controllare la versione compatibile con DOM e se fallisce ricadere nella modalità IE, questo forza nuovi browser (come IE 9) per utilizzare le tecniche più recenti (e compatibili). – Gertjan

0

si può mettere in una classe diversa e quindi chiama una funzione. Funziona quando ajax si aggiorna

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

//Call a function(input,input); 
}); 
Problemi correlati