2009-04-09 28 views
10

el problema que estoy enfrentando es la siguiente:llamada Javascript evento onchange cambiando programáticamente valor de texto

  • Tengo un cuadro de texto para un intervalo de fechas junto a un control de calendario.
  • Cuando el usuario selecciona una fecha del calendario, rellena esa fecha en el cuadro de texto
  • Cuando esto sucede, deseo activar una función de JavaScript, sin embargo, el evento 'onchange' no parece suceder.

me gusta lo ideal para poder añadir el evento como un atributo de la caja de texto, algo así como:

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

gracias de antemano

más información: La fecha se introduce en el cuadro de texto en C#. El control de calendario tiene un manejador de eventos en la página. Cuando se selecciona una fecha, el manejador de eventos pone la fecha en el cuadro de texto. Intenté establecer el foco en el cuadro de texto en este momento, luego puse un atributo onBlur en el cuadro de texto, pero el cuadro de texto nunca parece enfocar.

Supongo que podría llamar directamente a la función javascript en este momento haciendo ClientScript.RegisterClientScriptBlock o algo así, pero eso parece descuidado y nunca funciona como yo quiero.

Respuesta

7

Está malinterpretando lo que hace el evento onchange cuando se aplica a un área de texto. No se disparará hasta que pierda el foco o presionas enter. ¿Por qué no desencadenar la función desde un cambio en la selección que llena el área de texto?

Salida aquí para más información sobre el evento onchange: w3schools

2

Onchange solo se activa cuando el usuario ingresa algo por teclado. Un posible workarround podría ser enfocar primero el campo de texto y luego cambiarlo.

¿Pero por qué no recuperar el evento cuando el usuario hace clic en una fecha? Ya debe haber algunos javascript.

+0

La fecha se establece en el txtbox usando C#, no javascript. Intenté establecer el foco en el cuadro de texto en ese punto y usar el evento onBlur, pero el cuadro de texto nunca parece enfocar correctamente. –

+0

@ Matthew-Eso no tiene sentido. si la fecha se establece en el lado del servidor, ¿qué problema tiene al invocar el evento Onchange si ya está en el servidor dentro de una función? – TStamper

-4

El "onchange", sólo se activa cuando el atributo se cambia mediante programación o cuando el usuario realiza un cambio y luego se concentra fuera del campo.

¿Ha considerado utilizar el objeto de calendario de YUI? He codificado una solución que coloca el calendario yui dentro de un panel yui y oculta el panel hasta que se hace clic en una imagen asociada. Puedo ver cambios de cualquiera.

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

+5

El evento onchange NO se disparará cuando se cambie el valor de una entrada mediante programación. –

7

Puede desencadenar el evento simplemente con

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

No sé si esto no funciona en algunos navegadores, pero que debería funcionar en FF 3 y IE 7+

+0

necesito hacer esto desde C#, no javascript. –

+0

@ matthew_360: No puede llamar/iniciar un evento de JavaScript desde C#. – palswim

1

Usted La población es del lado del servidor. El uso de registerclientscript colocará el script al principio del formulario ... querrá utilizar RegisterStartupScript (Block) para que el script se coloque al final de la página en cuestión.

El primero intenta ejecutar el script antes de que el área de texto exista en el dom, este último ejecutará el script después de que se cree ese elemento en la página.

18

Ésta es una cuestión de edad, y no estoy seguro de si se va a ayudar, pero yo he sido capaz de disparar un evento mediante programación usando:

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

Aunque su comentario es antiguo, me salvó el día de hoy :) ¡Gracias! Una pequeña observación, invertiría el orden de los cheques, IE 9 es compatible con la función de envío, por lo que sería mejor verificar primero la versión compatible con DOM y, si eso falla, volver al modo IE, esto obliga a nuevos navegadores (como IE 9) para usar las técnicas más nuevas (y compatibles). – Gertjan

0

usted puede ponerlo en una clase diferente y luego llama a una función. Esto funciona cuando ajax refresh

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

//Call a function(input,input); 
}); 
Cuestiones relacionadas