3

次のような小さなコードがあります。

$("input#checkbox").change(changeCheckbox);

function changeCheckbox() {

    var inputCheck = $("input#checkbox"),
        button = $("input#button");

    if (inputCheck.is(":checked")) {

        button.hide();

    } else {

        button.show();
    }
}

これは、すべての最新のブラウザと IE 8 で完璧に機能します

しかし、これを次のように使用するとevent.preventDefault();:

$("input#checkbox").change(changeCheckbox);

function changeCheckbox(event) {

    event.preventDefault(); // <-- Here

    var inputCheck = $("input#checkbox"),
        button = $("input#button");

    if (inputCheck.is(":checked")) {

        button.hide();

    } else {

        button.show();
    }
}

または私が設定return false;

$("input#checkbox").change(changeCheckbox);

function changeCheckbox() {

    var inputCheck = $("input#checkbox"),
        button = $("input#button");

    if (inputCheck.is(":checked")) {

        button.hide();

    } else {

        button.show();
    }

return false; // <-- Here
}

その後、関数は一度しか機能せず、Internet Explorer 8 (のみ) でこれ以上何もできません

なぜこれが起こるのか誰かが私に説明できますか?

そして、私は他の多くの機能を持っており、最後にevent.preventDefault();return false;で同様のコードを使用していますが、OKです...

私はこのjQueryバージョンを使用しています:jquery_1.10.1.min.js

前もって感謝します!

4

3 に答える 3

4

なぜこれが起こるのか誰かが私に説明できますか?

これは、Internet Explorer のバグです (他に何か)。イベントとは対照的に、イベントchangeはキャンセル可能ではないはずclickです( Is event.preventDefault canceling change events?、 jQuery/Javascript: チェックボックスと'checked' 属性のクリックイベント、親要素のクリックで preventDefault() を使用する理由を参照)。チェックボックスを「無効」にしますか? )。ただし、IE8 では、changeイベントがキャンセルされたときにチェックボックスがチェックされないようにします。ここで試してみてください

それを回避する方法は?e.preventDefault() コードから(またはreturn false)を削除するだけです。とにかく使う理由が見当たりません。

于 2013-08-28T00:20:05.597 に答える
1

達成したいのは#button、の値に基づいて表示/非表示にすることです#checkbox。このようにできます。あなたのコードと比較して非常に少ないコード行

$('#checkbox').on('change', function() {
    $('#button').toggle(this.checked);
});

フィドル

于 2013-08-27T23:44:59.060 に答える
0

IE8 用に次のコードを追加できます。

if (event.preventDefault) event.preventDefault();
else event.returnValue = false;

jQuery を使用しているため、組み込みのクロスブラウザー イベント修正を使用できます。

event = $.event.fix(event);

参照: http://www.jquerysdk.com/api/jQuery.event.fix

于 2013-08-27T23:33:40.543 に答える