1

メニューナビゲーション関数を介してフォームを送信するjQuery関数があります。

$(function () {
    $('#sidebarmenu1 a').on('click', function () {
        var url = $(this).attr('href');
        $('#myform').attr('action', url);
        $("#myform").submit();
        if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; }
    })
});

このセクション:

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

サイドバーボタンのデフォルトのアクション(私は思う-これはまだ新しい)、つまり単にページに移動することを防ぎます。

これは、IEに対してpreventDefaultが定義されていないため、IEを満足させるためにこのように記述されています(そこで誤った用語を使用している可能性がありますが、IEはpreventDefaultを好みません)。

ただし、(他のスタックの質問で読んだように)イベントはFFに対してグローバルに定義されていないため、これによりFirefoxでエラーが発生します。次のエラーが発生します。

ReferenceError:イベントが定義されていません

このスタックの質問によると、 イベントはFireFoxでは定義されていませんが、ChromeとIEでは問題ありません。

IEとChromeでは、イベントはwindow.eventに解決されます。Firefoxにはこのプロパティがなく、代わりにパラメータとして渡すことでイベントハンドラ関数にイベントを提供します。jQueryは、すべてのブラウザーでイベントオブジェクトパラメーターを提供することにより、この違いを抽象化します。

しかし、私はここでjQueryを使用していると思っていましたが、まだ問題が発生しています。

私が基本的な間違いを犯している場合は申し訳ありませんが、自分でjsとjQを教えています。どんな助けでも大歓迎です、ありがとう!

4

3 に答える 3

3

これでうまくいくはずです。

$(function() {
    $('#sidebarmenu1 a').on('click', function(e) {
        var evt = e || window.event;
        var url = $(this).attr('href');
        $('#myform').attr('action', url);
        $("#myform").submit();
        evt.preventDefault();
    })
});​
于 2012-11-30T23:48:07.090 に答える
2

jQueryがイベントハンドラーに渡すイベントオブジェクトを使用する場合、問題は発生しません

$('#sidebarmenu1 a').on('click', function (event) {
    var url = $(this).attr('href');
    $('#myform').attr('action', url);
    $("#myform").submit();
    event.preventDefault();
})
于 2012-11-30T23:49:16.560 に答える
0

さらにいくつかのポイントがある場合は、2番目の回答に賛成票を投じます(jQueryの「event」引数を渡します)。

Firefox以外のブラウザで定義されたグローバルイベントに無意識のうちに依存していました。コードに戻り、すべてのクリックイベントで常にイベントパラメーターを指定していることを確認しました。

例えば

            $('#situationTextInput')
                .val('')
                .fadeTo(1000, 1.0)
                .focus()
                .off('keydown')
                .on('keydown', function (event) {
                    VsUtils.handleSpanishTextKeydown(event);
                });

また、私のコードのほとんどは単一のページを使用し、コンテンツを再利用しているため、.onの前に.offを呼び出す習慣があります。.offがないと、ダイアログの後続のステップで、(同じコールバックであっても)誤ってイベントを積み上げていました。

'event'をハンドラーに直接渡すようにコードを変更した場合の副作用は、'this'へのバインドでした。かわった。'this'を変更するためにコードをリファクタリングすることを選択しました。'event.currentTarget'への参照。

于 2013-11-18T16:57:08.450 に答える