Как отладить, почему не вызывается обработчик для события JavaScript «click»? - PullRequest
4 голосов
/ 31 августа 2011

Я установил обработчик для события click JavaScript элемента <button>, используя jQuery API , но обработчик не вызывается, когда кнопка фактически нажата. Как можно отладить, почему не вызывается обработчик событий? Я занимаюсь разработкой в ​​Visual Studio 2010 и отлаживаю с помощью инструментов разработчика Google Chrome.

Я новичок в JavaScript и не знаю методов отладки:)

EDIT

Это HTML-объявление рассматриваемой кнопки:

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

Соответствующий JavaScript:

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

Дайте мне знать, если потребуется дополнительная информация.

РЕДАКТИРОВАТЬ 2

Каким-то образом я все заработал, не зная, в чем дело, во-первых, но, по крайней мере, теперь я знаю, как определить, был ли найден элемент или нет!

Ответы [ 4 ]

4 голосов
/ 31 августа 2011

Встроенный JavaScript выполняется при загрузке страницы, поэтому, если кнопка определена после JavaScript, код не найдет ее и не сможет подключить обработчик.Вам нужно поместить этот JavaScript в функцию готовности документа (или загрузки), что означает, что он будет выполнен после загрузки кнопки (и всего остального на странице), и / или поместить его после кнопки в источнике.

4 голосов
/ 31 августа 2011

Отладка возможна только в том случае, если код действительно запущен, чего, похоже, нет.

Вы можете попытаться увидеть, находит ли он селектор по длине. оповещения ($ ( "# myselector") длина.); или же console.log ($ ( "# myselector") длина.);

Для отладки javascript я рекомендую использовать FIREBUG для Firefox (http://getfirebug.com/) - вы можете устанавливать точки останова, записывать в консоль и т. Д., И он дает все возможные отображения переменных, объектов и т. Д. Учебник можно найти здесь: http://www.youtube.com/watch?v=2xxfvuZFHsM

(Вы сказали, что плохо знакомы с jQuery / Javascript, так что надеюсь, что это помогло: D)

1 голос
/ 31 августа 2011

ваша кнопка может выглядеть так

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

для этого вы привязываете обработчик кликов, как

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

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

но недостатком этого подхода является то, что он будет вызываться при каждом нажатии кнопки, чтобы предотвратить добавление идентификатора к вашей кнопке и выбор этой конкретной кнопки, например

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

прикрепить к нему обработчик кликов, например

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

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

EDIT

в вашем случае выберите кнопку по номеру

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

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

Вы также можете использовать псевдо :button селектор

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

взгляните на селекторы jquery

1 голос
/ 31 августа 2011

Я предполагаю, что $('button').button(); вызывает исключение, а остальная часть вашего кода не выполняется.Закомментируйте эту строку и посмотрите, работает ли она.

Оригинальный ответ:

  1. Вставьте свой код или соответствующие его части.
  2. Добавьте оператор debugger; в функцию-обработчик, чтобы узнать, вводите ли вы его.
  3. Если нет, то проблема в том, как вы регистрируете обработчик.
  4. Если вывводите его, возможно, есть проблема с самим обработчиком.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...