He instalado un controlador para el evento click JavaScript de un elemento <button> usando jQuery API, pero no se llama al controlador cuando se hace clic en el botón. ¿Cómo puedo depurar por qué no se invoca el controlador de eventos? Estoy desarrollando en Visual Studio 2010 y depurando con la ayuda de las Herramientas para desarrolladores de Google Chrome.

Soy nueva en JavaScript y no conozco los métodos de depuración :)

EDITAR

Esta es la declaración HTML del botón en cuestión:

<button id="start-lint">Submit</button>

El JavaScript relevante:

$('button').button();
var btn = $("button#start-lint");
log.debug("Button: %s", btn);
btn.click(function () {
    log.debug("Button clicked");
});

Avíseme si necesita más información.

EDITAR 2

De alguna manera lo puse a funcionar, no estoy seguro de qué estaba mal en primer lugar, pero al menos ahora sé cómo saber si se encontró un elemento o no.

4
aknuds1 31 ago. 2011 a las 11:19

4 respuestas

La mejor respuesta

Solo puede depurar si el código se activa realmente, lo que parece no ser así.

Podría intentar ver si incluso encuentra el selector usando la longitud. alert ($ ("# myselector"). length); o console.log ($ ("# myselector"). length);

Para depurar javascript, le recomiendo que use FIREBUG para Firefox (http://getfirebug.com/): puede establecer puntos de interrupción, escribir en la consola, etc., y ofrece todas las posibles pantallas de variables, objetos, etc. El tutorial se puede encontrar aquí: http://www.youtube.com/watch?v=2xxfvuZFHsM

(Usted dijo que era nuevo en jQuery / Javascript, así que espero que haya ayudado: D)

4
Marco Johannesen 31 ago. 2011 a las 07:29

Supongo que $('button').button(); arroja una excepción y el resto de su código no se ejecuta. Comente esa línea y vea si funciona.

Respuesta original:

  1. Pegue su código o las partes relevantes del mismo.
  2. Agregue una declaración {{x0}} a su función de controlador para ver si la está ingresando.
  3. Si no, entonces hay un problema con la forma en que está registrando el controlador.
  4. Si lo está ingresando, tal vez haya un problema con el controlador en sí.
1
Roshan Mathews 31 ago. 2011 a las 07:43

El JavaScript en línea se ejecuta a medida que se carga la página, por lo que si el botón se define después del JavaScript, el código no lo encontrará y, por lo tanto, no podrá adjuntar el controlador. Debe poner ese JavaScript en la función de documento listo (u onload), lo que significa que se ejecutará después de que se haya cargado el botón (y todo lo demás en la página), y / o ponerlo después del botón en la fuente.

4
nnnnnn 31 ago. 2011 a las 07:38

Su botón puede verse así

<input type="button" value="Click" />

Para esto se une un controlador de clic como

$(document).ready(function(){
    $("input[type='button']").click(function(e){
        alert("somebody clicked a button");
        });
});

http://jsfiddle.net/6gCRF/5/

Pero el inconveniente de este enfoque es que se llamará por cada clic en el botón, para evitar que desee agregar una identificación a su botón y seleccionar ese botón específico, p.

<input type="button" value="Click" id="specific" />

Adjunte un controlador de clic como

 $(document).ready(function(){
    $("#specific").click(function(){
    alert("specific button clicked");
    });
 });

http://jsfiddle.net/6gCRF/4/

EDITAR

En su caso seleccione el botón por id

$(document).ready(function(){
    $("#start-lint").clcik(function(){

    console.log("clicked");
    });
});

También puedes usar el pseudo selector :button

$(document).ready(function(){
    $(":button").click(function(e){
            console.log("clicked");
            });
});

echa un vistazo a los selectores jquery

1
Rafay 31 ago. 2011 a las 07:45