5

次のコードを検討してください。

HTML

<a href="http://www.google.com" target="_blank" id="myLink" class="anyclass">testlink</a>

ジャバスクリプト

$('#myLink').on("mousedown",doMouseDown);

function doMouseDown(e)
{
    e.stopImmediatePropagation();
    console.log("Mouse down");
    return true;
}

これは私のコードの非常に単純化されたバージョンですが、問題はまったく同じです。つまりe.stopImmediatePropagation()、ハンドラーで使用すると、リンクをクリックしても Google に送信されないことが予想されます。私はconsole.log()処刑されるだけです。私のすべての調査は、私がそう考えるのは正しいことを示していますが、リンクの「マウスダウン」ハンドラーとデフォルトの「クリック」ハンドラーの両方を実行しています (つまり、Google を新しいタブで開きます)。

信念なしe.preventDefault()に、ハンドラーの最初の命令として追加しようとしfalseました。 を返そうとしました。 バインディング時にハンドラーを匿名関数として定義しようとしました。これらすべてがさまざまな組み合わせであり、改善はありません。これを修正するアイデアがまったくないことを認めなければなりません。誰か私を正しい方向に向けてくれませんか?どんな助けでも大歓迎です。

テストしたい場合は、ここにフィドルがあります

4

2 に答える 2

3

これを試して

var i=0;
$('#myLink').on('mousedown mouseup click', function(e) {

    e.preventDefault();
    e.stopImmediatePropagation();
    console.log(e.type);
    console.log(i);
    i++;
});

コンソールに出力

"mousedown"
0
"mouseup"
1 
"click"
2

と使用

var i=0;
$('#myLink').on('mousedown mouseup click', function(e) {
if(i>0)
    {
    return false;
    }
e.preventDefault();
e.stopPropagation();
console.log(e.type);
console.log(i);
i++;
 });

コンソールに出力

"mousedown"
0
于 2014-04-20T16:31:30.487 に答える
0

アイデアをありがとう!私は実装に苦労してきましたhoverclickモバイルChromeはトリガーhoverclickれ、メニューをタップします)。ニーズに合わせて少し修正しましたが、100% 修正されたわけではありません。PC および BlackBerry ブラウザーで入力すると、サブメニューを閉じるために 2 回クリックする必要があります。

http://jsfiddle.net/j24gpw4z/2/

var i = 0;
function preventClick(e) {
    console.log("function");
    if (i > 0) {
        console.log(i + ": " + e.type);
        i = 0;
        console.log("false: " + i);
        return false;
    }
    $("#subnav").slideToggle("fast", "linear");
    console.log(i + ": " + e.type);
    i++;
};

$(".submenu").hover(function(e) {
    e.preventDefault();
    preventClick(e);
    i++
},
                    function(e) {
    e.preventDefault();
    console.log("hover out");
    $("#subnav").hide();
    i = 0;
}
                   );

$(".submenu").click(function(e) {
    e.preventDefault();
    preventClick(e);
    i = 0;
});
于 2015-10-19T00:07:17.403 に答える