重要!:我必须使用onclick属性。在我的案例中,在事件监听器/处理程序上使用Jquery不是一个选项。为什么?我的代码中还有很多其他内容依赖于代码中的属性及其表现形式。
在onclick
属性中放置警报时,它按预期工作,警报显示在弹出窗口中,返回false会阻止按下按钮提交表单:
<script>
$().ready(function() {
$('.pretty .prettycheckbox').click(function () {
var myType = $('.pretty .prettycheckbox').find("input[class^=car-type]:checked").val();
if (myType == 1) {
$('#sendButton').attr("onclick", "alert('Direct!'); return false;");
}
if (myType == 2) {
$('#sendButton').removeAttr("onclick");
}
});
});
</script>
但是当从onclick atttribute调用函数时它无效:
<script>
$().ready(function() {
$('.pretty .prettycheckbox').click(function () {
var myType = $('.pretty .prettycheckbox').find("input[class^=car-type]:checked").val();
if (myType == 1) {
$('#sendButton').attr("onclick", "submitDB(); return false;");
}
if (myType == 2) {
$('#sendButton').removeAttr("onclick");
}
});
});
</script>
<script>
$().ready(function(){
function submitDB() {
alert('From function!');
}
});
</script>
知道为什么吗?
为什么忽略该功能?
答案 0 :(得分:7)
您的代码无法正常工作,因为您的范围很大。 onclick属性只能定位全局范围内的函数。在您的情况下,您的功能不在全球范围内。
<script>
$().ready(function(){
function submitDB() {
alert('From function!');
}
});
</script>
应该是
<script>
function submitDB() {
alert('From function!');
}
</script>
我仍然不明白为什么&#34;学校&#34;会尝试教会如何使用jquery添加onclick属性。您没有理由想要使用javascript向元素添加onclick属性,更不用说jQuery了。
答案 1 :(得分:3)
它的长期和短缺是你做错了。
如果要将事件处理程序绑定到元素,请使用on
(或适当的别名,例如click
):
$('#sendButton').on('click', function () {
alert('Direct!');
return false;
});
绝对没有理由使用onclick
属性,甚至尝试动态设置这些属性。
要取消绑定事件处理程序,请使用off
:
$('#sendButton').off('click');
答案 2 :(得分:1)
试试这个:
if (myType == 1) {
$('#sendButton').on("click", function() {
alert("clicked"); //sorry forgot to edit the callback in!
});
}
if (myType == 2) {
$('#sendButton').off("click");
}
如果您必须使用onclick,请不要使用jquery。
答案 3 :(得分:1)
这不是一个好习惯。您应该将事件绑定到不更改属性的元素。
$('#sendButton').off("click").on("click", submitDB);
我刚发现问题 - &gt; http://jsfiddle.net/VJSRy/ 即如果你真的想使用这种错误的方法,你应该将你的函数定义为全局函数。即:
submitDB = function() {
alert('From function!');
}
即。跳过 submitDB 前面的 var 。