没有正确调用onclick属性的JavaScript函数

时间:2013-09-04 20:43:23

标签: jquery

重要!:我必须使用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>

知道为什么吗?

为什么忽略该功能?

4 个答案:

答案 0 :(得分:7)

您的代码无法正常工作,因为您的范围很大。 onclick属性只能定位全局范围内的函数。在您的情况下,您的功能不在全球范围内。

<script>
    $().ready(function(){
        function submitDB() {
            alert('From function!');
        }
    });
</script>

应该是

<script>
        function submitDB() {
            alert('From function!');
        }
</script>

演示:http://jsfiddle.net/ZeLXY/

我仍然不明白为什么&#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