1

イベントが前のハンドラーによってキャンセルされたかどうかを判断するためのJavascriptイベントハンドラーからのクロスブラウザーの方法はありますか?IEやChromeなどの他のブラウザevent.returnValue にはテスト可能なプロパティがありますが、FireFoxにはそのようなプロパティがないようです。

これが私が話しているシナリオの例です。あなたはそのような形をしています:

<form id="test" name="test" onsubmit="return false;" />

そして、addEventListener/ attachEvent(簡潔にするためにフックアップは省略)を使用して、Javascriptでイベントをフックアップします。イベントは、チェーン内の以前の何かがfalseを返したか、そうでなければそれをキャンセルしたかどうかを知る必要があります。IEバージョンは次のようなものです。

function onSubmitHandler(e) {
    alert("event was cancelled prior to this handler: " + e.returnValue);
}

これはIE、Chromeなどで機能しますが、FireFoxにはないため、もちろん機能しませんevent.returnValue。私はFireFoxでこれを決定する他の方法のためにインターウェブを組み合わせましたが、何も思いつきませんでした。onsubmitフォームの属性を直接設定することを伴わないこの問題の解決策はありますか?

4

2 に答える 2

0

これがこれを回避するための厄介な方法です。クリーンな規格に準拠した方法を望んでいましたが、ないようです。

function onSubmitHandler()
{
    // only called if the other onsubmit handlers succeed
}

// hook in submit
var originalOnSubmit = form.onsubmit;

form.onsubmit = function(e)
{
    var ret;

    if (originalOnSubmit)
        ret = originalOnSubmit();

    if (ret != false)
    {
        return onSubmitHandler(e);
    }
};
于 2009-02-12T16:28:18.527 に答える
0

私の理解では、event.returnValue の主な用途は、そのイベントのデフォルト アクション (つまり、キャンセル) を防止することです。たとえば、上記のようなハンドラーでは:

function onSubmitHandler(e) {
    e.returnValue = false;
}

上記の IE のコードは、デフォルトのアクションを妨げ、フォームが送信されないようにします。Gecko DOM Referenceによると、Firefox の同等のコードは次のとおりです。

e.preventDefault();

イベントがキャンセルされたかどうかをクロスブラウザーで確認したい場合、jQueryのようなライブラリを使用することは選択肢になりますか? jQuery を使用して関数をフォームの onsubmit イベントにバインドし、そのハンドラーで .preventDefault() を呼び出すと、サポートされているすべてのブラウザーで同じことが実現します。さらに、jQuery イベント オブジェクトの .isDefaultPrevented() メソッドを使用して、イベントがキャンセルされたかどうかを判断し、おそらく lhs = e.returnValue を使用して目的を達成できます。

于 2009-02-05T21:09:37.283 に答える