2012-05-03 25 views
26

Estoy tratando de hacer una función que se ejecutará cuando se cambie el valor de text input field. El valor del campo cambia cuando se hace clic en una celda de la tabla, no en keyup, ni se pega. He intentado de esta manera:jQuery - en el texto de entrada de cambio

$("#kat").change(function(){ 
    alert("Hello"); 
}); 

y tengo el campo de texto:

<input type="text" id="kat" value="0"/> 

pero no está funcionando. ¿Alguna ayuda?

+1

Suena como que desea adjuntar al evento click de esa celda de la tabla. – Tejs

+1

¿Qué quiere decir que el valor cambia cuando se hace clic en una celda de tabla, dónde está el marcado para eso, y eso no implica que un controlador de evento de clic sea el camino a seguir? – adeneo

+0

Quería reducir la cantidad de código poniendo el valor del enlace cliqueado en un campo de entrada de texto y luego en ese cambio ejecutando una función, pero al final hice una función para cada evento de clic (22 eventos) ... –

Respuesta

25

Esto es de un comentario en la página de documentación de jQuery:

En los navegadores más antiguos, pre-HTML5, "keyup" es definitivamente lo que usted está buscando.

En HTML5 hay un nuevo evento, "entrada", que se comporta exactamente como usted parece pensar que debería haberse comportado el "cambio", ya que se dispara tan pronto como se presiona una tecla para ingresar información en un formulario.

$ ('elemento'). Bind ('entrada', función);

4

La documentación de jQuery dice que este "También se visualiza [el resultado de ejecución del gestor] si cambia el texto en el campo y haga clic de distancia. Si el campo pierde el foco y sin el contenido de haber cambiado, sin embargo, el evento no se dispara ".

Tratar los eventos keyup y keydown, así:

$("#kat").keydown(function(){ 
    alert("Hello"); 
}); 
9

Me parece que va a actualizar el valor del campo de texto en javascript. onchange evento se activará solo cuando ingrese datos y tabique fuera del campo de texto.

Una solución alternativa es desencadenar el evento de cambio de cuadro de texto al modificar el valor del cuadro de texto del script. Consulte a continuación,

$("#kat").change(function(){ 
    alert("Hello"); 
}); 


$('<tab_cell>').click (function() { 
    $('#kat') 
     .val($(this).text()) //updating the value of the textbox 
     .change();   //trigger change event. 
}); 
+0

Quería reducir la cantidad de código colocando el valor del enlace cliqueado en un campo de entrada de texto y luego en ese cambio ejecutando una función, pero al final hice una función para cada evento de clic (22 eventos) ... –

+0

@MarkoCakic Su pregunta no está clara, Publique HTML y JS relevantes para que podamos ayudar. –

+0

Esta es una manera genial de activar un evento con el encadenamiento. ¡Gracias! – film42

0

Eso funciona para mí. Podría ser un problema del navegador como se mencionó, o tal vez jQuery no está registrado correctamente, o tal vez el problema real es más complicado (que haya hecho una versión más simple para preguntar esto). PD: tuvo que hacer clic fuera del cuadro de texto para que se dispare.

http://jsfiddle.net/toddhd/Qt7fH/

9

Esta técnica está trabajando para mí:

$('#myInputFieldId').bind('input',function(){ 
       alert("Hello"); 
    }); 

Tenga en cuenta que de acuerdo a this JQuery doc "en" sea conveniente y no se unen en las últimas versiones.

0

Esto funciona para mí en todos los navegadores y jQuery < = v1.10

$('#kat').on('keyup', function() { 
    alert("Hello"); 
}); 

o como parece que desea

$('#kat').on('click', function() { 
    alert("Hello"); 
}); 

incendios de entrada de cuadro de texto cambio de campo de eventos como era de esperar, a , el jQuery.Evento de cambio sólo funciona correctamente en los navegadores HTML5 apoyado

4

Esto funcionó para mí

var change_temp = ""; 
$('#url_key').bind('keydown keyup',function(e){ 
    if(e.type == "keydown"){ 
     change_temp = $(this).val(); 
     return; 
    } 
    if($(this).val() != change_temp){ 
     // add the code to on change here 
    } 

}); 
3
function search() { 
     var query_value = $('input#search').val(); 
     $('b#search-string').html(query_value); 
     if(query_value !== ''){ 
      $.ajax({ 
       type: "POST", 
       url: "search.php", 
       data: { query: query_value }, 
       cache: false, 
       success: function(html){ 
        //alert(html); 
        $("ul#results").html(html); 
       } 
      }); 
     }return false;  
    } 

    $("input#search").live("keyup", function(e) { 
     clearTimeout($.data(this, 'timer')); 

     var search_string = $(this).val(); 

     if (search_string == '') { 
      $("ul#results").fadeOut(); 
      $('h4#results-text').fadeOut(); 
     }else{ 
      $("ul#results").fadeIn(); 
      $('h4#results-text').fadeIn(); 
      $(this).data('timer', setTimeout(search, 100)); 
     }; 
    }); 


and the html 
<input id="search" style="height:36px; font-size:13px;" type="text" class="form-control" placeholder="Enter Mobile Number or Email" value="<?php echo stripcslashes($_REQUEST["string"]); ?>" name="string" /> 
     <h4 id="results-text">Showing results for: <b id="search-string">Array</b></h4> 
     <ul id="results"></ul> 
0

probar esto,

$('#kat').on('input',function(e){ 
alert('Hello') 
}); 
1

Hace poco me preguntaba por qué mi código no funciona, entonces Me di cuenta de que necesito configurar los controladores de eventos tan pronto como se cargue el documento; de lo contrario, cuando el navegador carga el código línea por línea, carga el JavaScript, pero todavía no tiene el elemento para asignar la víspera. nt manejador de ella. con su ejemplo, debería ser así:

$(document).ready(function(){ 
    $("#kat").change(function(){ 
     alert("Hello"); 
    }); 
}); 
Cuestiones relacionadas