-1

我是 jQuery 新手,遇到了一些问题。这个 jsFiddle 显示了我正在经历的事情:http: //jsfiddle.net/rE2FH/5/请注意该按钮如何不执行任何操作。

我想要做的是为按钮设置一个点击监听器并让它做一个警报();。但是,click 事件或 alert() 都不起作用。

我已经尝试过单击事件,如 .click()、.on()、.delegate() 和 .live(),这些似乎都不起作用。至于警报,除了“如果您执行 'alert([sting]);',它会自动起作用!”之外,我找不到任何其他东西。我知道 .click() 用于 1.7+,.live() 已折旧,即使这样 .delegate() 也比它更受欢迎。

在我当前的项目中,我使用带有脚本的 jsp <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>但是,它在 jsFiddle 中也不起作用。此版本在我们的其他一些页面(警报和 .click 事件)上运行良好,但由于某种原因,我目前正在处理的页面存在问题。我已经做了我能看到的一切来模仿其他页面,但我可能会遗漏一些东西。编写 jQuery 的那个人已经不在我们公司了。

我已经搜索过 SO,但这些结果都不适合我:

jQuery .click() 不起作用

jQuery .click() 问题

jquery按钮不响应点击方法

jquery点击事件问题

+其他都是相同的路线。

任何见解将不胜感激。

4

4 回答 4

2

你有几个问题。确保检查 javascript 控制台是否有错误。这是一个工作版本:

http://jsfiddle.net/LxuVy/

$(document).ready(function(){
    $(document).delegate('#but', 'click', buttonClick);

    function buttonClick() {
        $('#res').hide().html("BUTTON!!!").fadeIn('fast');
        alert("Hello!");
    }
});

要分解您的问题:

$(document).ready(function(){
    $.delegate('#but', 'click', buttonClick());

    function buttonClick(){
        $('#res').hide().html("BUTTON!!!").fadeIn('fast');
        alert("Hello!");
    }; // this semi-colon shouldn't be here
}; // missing closing paren for ready()

delegate像这样使用:

$('selector').delegate(...)

虽然delegate()已替换为on(),但应改为使用。

另外,buttonClick()应该是buttonClick。添加括号时,您正在执行该函数。在这种情况下,您要做的是将函数作为参数传递。

于 2013-07-19T15:22:29.423 回答
2

您错过)了 document.ready 的结尾:

$(document).ready(function(){
    $.delegate('#but', 'click', buttonClick());

    function buttonClick(){
        $('#res').hide().html("BUTTON!!!").fadeIn('fast');
        alert("Hello!");
    };
});

我还建议.on()这样使用:http: //jsfiddle.net/rE2FH/23/

于 2013-07-19T15:25:37.810 回答
1

多个问题。

首先,您需要选择一个具有委托的元素(最近的静态父元素)

$(document).delegate(...)

参数中的函数不应该以括号结束

$(document).delegate('#but', 'click', buttonClick);

而且您缺少右括号。

小提琴:http: //jsfiddle.net/rE2FH/18/

但由于您的按钮是静态的,您可以直接使用 click :

$('#but').click(buttonClick);

此外,不推荐使用委派,您应该使用.on().

于 2013-07-19T15:22:47.240 回答
1

我看到三个问题:

  1. .delegate也已弃用,您应该使用.on. 您也直接在$. 最后,您实际上并没有将事件委托给任何祖先,因此您很可能.click直接使用。

  2. 在绑定事件时不是传递函数引用,而是调用函数(传递buttonClick()而不是传递buttonClick)。

  3. 您忘记在末尾关闭括号,导致语法错误(始终检查浏览器的控制台,它会显示这种错误)。

解决所有这些问题,您的代码将是:

$(document).ready(function(){

    // using .click instead of .delegate
    // .on('click', buttonClick) would work too
    $('#but').click( buttonClick );
    // no calling parentheses  -^

    function buttonClick(){
        $('#res').hide().html("BUTTON!!!").fadeIn('fast');
        alert("Hello!");
    }
});
// added missing ) at the end
于 2013-07-19T15:23:01.793 回答