2013-07-19 31 views
-1

我是jQuery的新手,并且遇到了一些问题。这个jsFiddle显示我正在经历的事情:http://jsfiddle.net/rE2FH/5/请注意按钮如何不起作用。jQuery .click()和alert()问题

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

我已经尝试点击事件作为.click(),.on(),.delegate()和.live()这似乎没有工作。至于警报,我找不到相当于“它自动工作,如果你做'警报([刺痛])等同的东西;'!”我知道.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中工作。这个版本可以在我们的其他页面(alert和.click事件)上正常工作,但由于某种原因,我目前正在使用的那个版本有问题。我尽我所能去模仿其他页面,但我可能会错过一些东西。那个写jQuery的人不在我们公司了。

我已经搜查SO,没有这些结果都为我工作:

jQuery .click() not functioning

jQuery .click() problem

jquery button not respond to click method

jquery click event issues

+人,一直以来都同样的线条。

任何有识之士将不胜感激。

+0

你有一些语法错误和对功能的误解离子:http://jsfiddle.net/e8Nrz/ – Ian

回答

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。当你添加括号时,你是执行的函数。在这种情况下你想要做的是通过函数作为参数。

+0

这工作!谢谢!这实际上澄清了一些代码,我不确定我在项目的其他地方看到了什么。我也得到了.on()的工作。\ – sparks

+0

很高兴我能帮上忙! –

1

多重问题。

首先,你需要选择与授权(最接近静态父)元素

$(document).delegate(...) 

对参数的功能不应该用方括号的

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

光洁度和你缺少一个右括号。

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

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

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

此外,委托已过时,你应该使用.on()

1

我看到三个问题:

  1. .delegate也已经过时,你应该使用.on。您也可以直接拨打电话$。最后,you're not actually delegating the event to any ancestor,所以你可以直接使用.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 
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/