11

href付きのアンカーを持つChosenというドロップダウンウィジェットを使用していますjavascript:void(0)。ドロップダウンをクリックすると機能しますが、IEではonbeforeunload、アプリケーションが終了するかどうかを確認するため、イライラする新しいイベントが発生します。そして明らかに、フォームデータを入力するときにこれらの質問をしたくはありません。

選択したライブラリを変更せずにこの問題を取り除く方法はありますか?

残念ながらこれ:

window.onbeforeunload = function (e) {
    console.log(window.location);
};

どちらもログに記録javascript:void(0)されないため、ターゲットURLの確認には使用できません。

この動作は少なくともIE9で発生し、それが私が懸念していることです(古いIEではありません)。

4

6 に答える 6

13

私が見ることができる唯一の解決策は、リンクfalseのイベント ハンドラーに戻ることを追加することです。onclickリンクをクリックしてページを変更する予定がないことを IE に伝えます。

<a href="javascript:void(0);" onclick="doSomething(); return false;">Link</a>

同じことを次のように書くことができます。

<script>
    function doSomething() {
        // do Something
        return false;
    }
</script>

<a href="javascript:void(0);" onclick="return doSomething();">Link</a>
于 2012-05-11T09:20:08.253 に答える
2

私は最終的にアンカーに対してクリックイベントをリッスンし、イベントをキャンセルしてonBeforeUnload発火を防ぎました:

$chosen.find('.chzn-single').click(function() {
    return false;
});
于 2012-05-11T09:40:12.197 に答える
2

私はこれがかなり古いことを知っています...しかし、私は最近私の仕事のためにこれに出くわしました. 残念ながら、まだ IE9 のサポートを余儀なくされています。このプロジェクトでは Angular.js を使用しており、ユーザーがdata-ng-click.

あなたの例では、イベントを渡し、関数内でデフォルトのアクションを防ぎ、バブルアップを止めるだけです。これを行うには、次のことだけを行う必要があります。

// Inside the HTML
{...}
<a href="javascript:void(0);" onclick="doSomething(evt);">Link</a>
{...}
<script>
    function doSomething(evt) {
        evt.preventDefault();
        evt.stopPropagation();
        // Do Something
    };
</script>
{...}

Angularで私がしたことは次のことだけでした:

// Inside the View
<a href="javascript:void(0)" data-ng-click="addStuff($event)">Add Stuff</a>

// Inside the controller
function addStuff($event) {
    $event.preventDefault();
    $event.stopPropagation();
    // Do Something
};

これが手遅れではないことを願っています。他の人の助けになることを願っています。

于 2015-03-26T17:22:15.643 に答える
1

同じ問題がありました。あなたの質問を見つけました。私の解決策は、選択したすべてのドロップダウン リスト アンカー タグに onclick 属性を追加し、window.onbeforeunload = null を呼び出す必要があることです。

私の場合、私は入れました

$(".chzn-single").attr("onclick", "window.onbeforeunload = null;");

選択したライブラリをセットアップした後、正常に動作します

于 2013-12-17T16:23:15.083 に答える
0

これには href を使用しないでください。余分な作業を最小限に抑えたシンプルなソリューション:

href をシミュレートする CSS クラスを使用することを好みます。明らかに、このクラスの色とスタイルを Web サイトに合わせて変更しますが、この目的のために、標準の青い下線付きのリンクを使用します。

<style>
    .linkSimulate
    {
        cursor: pointer;
        COLOR: blue;
        text-decoration: underline;
    }
</style>

次に、単純なアンカーを使用します

<a onclick = "do_save();" class ="linkSimulate">Link</a>
于 2014-03-31T13:41:11.627 に答える