如何调试为什么不会调用“click”JavaScript事件的处理程序?

时间:2011-08-31 07:19:35

标签: javascript jquery debugging jquery-ui javascript-events

我已经使用jQuery APIclick元素的<button> JavaScript事件安装了一个处理程序,但是当实际点击按钮时,处理程序不会被调用。如何调试未调用事件处理程序的原因?我正在开发Visual Studio 2010并在Google Chrome开发者工具的帮助下进行调试。

我是JavaScript新手,不知道调试方法:)

修改

这是相关按钮的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 个答案:

答案 0 :(得分:4)

如果代码实际被触发,您只能进行调试,而这似乎不是。

您可以尝试查看它是否使用长度查找选择器。 警报($( “#myselector”)的长度。); 要么 的console.log($( “#myselector”)的长度。);

为了调试javascript,我建议你使用FIREBUG for Firefox(http://getfirebug.com/) - 你可以设置断点,写入控制台等,它可以显示所有变量,对象等。 可以在此处找到教程:http://www.youtube.com/watch?v=2xxfvuZFHsM

(你说jQuery / Javascript的新手,所以希望它有所帮助:D)

答案 1 :(得分:4)

内联JavaScript在页面加载时执行,因此如果在JavaScript之后定义按钮,则代码将无法找到它,因此无法附加处理程序。您需要将JavaScript放在文档就绪(或onload)函数中,这意味着它将在按钮(以及页面上的其他所有内容)加载后执行,和/或将其放在源代码中的按钮之后。

答案 2 :(得分:1)

我猜测$('button').button();会引发异常,而其余的代码都不会被执行。注释掉该行,看看它是否有效。

原始回复:

  1. 粘贴您的代码或其相关部分。
  2. 向处理程序函数添加debugger;语句,以查看是否输入了该语句。
  3. 如果没有,那么您注册处理程序的方式就会出现问题。
  4. 如果您正在输入,可能是处理程序本身存在问题。

答案 3 :(得分:1)

您的按钮可能如下所示

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

为此绑定一个点击处理程序,如

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

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

但这种方法的缺点是每按一次按钮都会调用它,以防止你可能想要为你的按钮添加一个id并选择那个特定按钮,例如

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

附加一个点击处理程序,如

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

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

修改

在您的情况下,按ID

选择按钮
$(document).ready(function(){
    $("#start-lint").clcik(function(){

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

您也可以使用伪:button选择器

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

have a look at jquery selectors