1

私のコードは...

var timer;
var func = function () {
        $("body").append("1");
};

$(document).on('mousedown' , 'a' , function(e){
        timer = setTimeout(func, 1000);
}).on('mouseup mouseleave' , 'a' , function(e){
        clearTimeout(timer);
});

すべてが機能しています。しかし、この関数を次のようなリンクに設定すると<a href="http://google.com">text</a>

設定する必要がありますreturn false;(URLまたは別のonclick()機能にリダイレクトしないでください)

どこreturn false;で設定できますか? または別の解決策?

PS:通常のクリックでクリックすると、リンクが正常に機能します

プレイグラウンド: http://jsbin.com/iwilop/1/edit


jQueryでクリックアンドホールドをリッスンするにはどうすればよいですか?

4

2 に答える 2

2

clickハンドラーを追加する必要があり、ハンドラーfuncが呼び出された場合は、クリックのデフォルト アクションを防止します。ここで私はtimerフラグとして使用しています:

var timer = 0;
var func = function () {
  $("body").append("1");
  timer = 0;
};

$(document).on('mousedown' , 'a' , function(e){
  timer = setTimeout(func, 1000);
}).on('mouseup mouseleave' , 'a' , function(e){
  if (timer) {
    clearTimeout(timer);
  }
}).on('click', 'a', function() {
  if (!timer) {
    return false;
  }
});

更新されたJSBin

于 2013-02-27T10:43:39.580 に答える
0

ハンドラーが必要ですclick(他のハンドラーが起動する可能性がある場合を除き、return false を実際に呼び出す必要はありません)。

$(document).on('mousedown' , 'a' , function(e){
        timer = setTimeout(func, 1000);
}).on('mouseup mouseleave' , 'a' , function(e){
        clearTimeout(timer);
}).on('click', 'a', function(e) {
        return false;
});

上記はページ上のすべてのリンクに影響することに注意してください。aセレクターをより具体的に修飾する必要がある場合があります (例: a.blah)。

編集:あなたの改訂された質問に照らして、私はTJ Crowderの答え以上に提供するものは何もありません. 私が言える唯一のことは、グローバル変数に注意することです。すぐに呼び出される関数式などですべてをラップすることをお勧めします。

于 2013-02-27T10:45:52.277 に答える