-3

重要!: 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 属性から関数を呼び出すと機能しません。

<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

4 に答える 4

7

スコープに大きな問題があるため、コードが機能しません。onclick 属性は、グローバル スコープ内の関数のみを対象にすることができます。あなたの場合、関数はグローバルスコープにありません。

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

する必要があります

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

デモ: http://jsfiddle.net/ZeLXY/

「学校」がjqueryを使用してonclick属性を追加する方法を教えようとする理由はまだわかりません。javascript を使用して要素に onclick 属性を追加したい理由はありません。jQuery はなおさらです。

于 2013-09-04T21:08:26.487 に答える
3

要するに、あなたのやり方が間違っているということです。

イベント ハンドラーを要素にバインドする場合は、on(または などの適切なエイリアスclick) を使用します。

$('#sendButton').on('click', function () {
    alert('Direct!');
    return false;
});

onclickこの属性を使用したり、そのような属性を動的に設定しようとしたりする理由はまったくありません。

イベント ハンドラのバインドを解除するには、次を使用しますoff

$('#sendButton').off('click');
于 2013-09-04T20:46:52.183 に答える
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 を使用しないでください。

于 2013-09-04T20:47:13.627 に答える
1

それは良い習慣ではありません。属性を変更しない要素にイベントをバインドする必要があります。

$('#sendButton').off("click").on("click", submitDB);

問題を見つけました-> http://jsfiddle.net/VJSRy/ つまり、間違っているこのアプローチを本当に使用したい場合は、関数をグローバルなものとして定義する必要があります。すなわち:

submitDB = function() {
   alert('From function!');
}

つまり、 submitDBの前のvarをスキップします。

于 2013-09-04T20:47:28.597 に答える