jQuery .click()和alert()问题

时间:2013-07-19 15:16:54

标签: javascript jquery jsp

我是jQuery的新手,我遇到了一些问题。这个jsFiddle显示了我遇到的情况:http://jsfiddle.net/rE2FH/5/注意按钮没有做任何事情。

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

我已尝试将click事件视为.click(),. on(),. delegate()和.live(),但这些似乎都不起作用。至于警报,除了相当于“它自动工作,如果你做'警报([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() not functioning

jQuery .click() problem

jquery button not respond to click method

jquery click event issues

+其他一直都是相同的行。

任何见解都将受到赞赏。

4 个答案:

答案 0 :(得分: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应为{{1}}。添加括号时,您正在执行该功能。在这种情况下,您要做的是将函数作为参数传递。

答案 1 :(得分: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/

答案 2 :(得分:1)

多个问题。

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

$(document).delegate(...)

参数中的函数不应该用braket

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

你错过了一个右括号。

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

但由于你的按钮是静态的,你可以直接点击:

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

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

答案 3 :(得分:1)

我看到三个问题:

  1. .delegate也已弃用,您应该使用.on。你也直接在$上称错了。最后是you're not actually delegating the event to any ancestor,因此您可以直接使用.click

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

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

  4. 解决所有问题,您的代码将是:

    $(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