我是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 button not respond to click method
+其他一直都是相同的行。
任何见解都将受到赞赏。
答案 0 :(得分:2)
你有几个问题。确保您检查javascript控制台是否有错误。这是一个工作版本:
$(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)
我看到三个问题:
.delegate
也已弃用,您应该使用.on
。你也直接在$
上称错了。最后是you're not actually delegating the event to any ancestor,因此您可以直接使用.click
。
在绑定事件时,您没有传递函数引用,而是调用函数(您正在传递buttonClick()
而不是buttonClick
)。
您忘记在最后关闭括号,导致语法错误(始终检查浏览器的控制台,它会显示此类错误)。
解决所有问题,您的代码将是:
$(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