説明
コミュニティWebサイトでは、各ユーザーのニックネームはプロフィールページへのリンクですが、ニックネームをダブルクリックすると、このユーザーのメニューがニックネームの下に表示されます。このポップアップメニューのコンテンツは、ajax呼び出しを使用してロードされます。これまで、アンカーhrefで「javascript:」を使用し、JSを使用してシングル/ダブルクリックをキャッチしました。ユーザーがダブルクリックメニューを維持しながら、タブなどでプロファイルリンクを開くことができるように、hrefをクリーンアップして適切なURLを追加したいと考えました。私はそれが最高のデザインではないことを理解しています、それは仕事をすることへのやや執着になっています。
問題
したがって、シングルクリックを通常どおりに動作させ(ブラウザをhrefに送信)、ダブルクリックしてpreventDefaultを実行し、代わりにカスタム関数(イベント)を呼び出します。シングルクリック部分でwindow.locationを使用することでこれを行うことができますが、それは私が改善したかった妥協/ハックのように感じます。
これまでのコード質問1067464の回答1067484
(リンクの投稿は許可されていません)を以下の基礎として使用
jQuery(document).ready(function($) {
$("#hello")
.bind('click', singleClick)
.bind('dblclick', doubleClick);
});
function singleClick(e) {
e.preventDefault();
var el = this;
setTimeout(function() {
var dblclick = parseInt($(el).data('double'), 10);
if (dblclick > 0) {
$(el).data('double', dblclick-1);
} else {
$('#result').html('click registered - browser should proceed to url');
// Attempting to make browser follow original href url:
$(el).unbind('click', singleClick);
}
}, 300);
}
function doubleClick(e) {
$(this).data('double', 2);
e.preventDefault();
$('#result').html('double-click registered - browser should stay here');
// Display dblclick popup-menu here
}
( http://jsbin.com/iboyo5/2でライブを参照/編集してください)
このシングルクリック部分が欠けているだけで、window.locationよりも「クリーンな」方法が必要でした。これが.unbind()をいじっている理由です。これも100%の解決策ではありません。.unbind()関数は私が望むことを実行しますが、コードの現在の実行のハンドラーをアンロードしないため、2回のシングルクリックごとに1回だけ機能します。これは私が今修正する必要がある問題です。
ところで:最初の.clickが設定された遅延のために一時停止されてもかまいません。URLが「起動」するまで300ms待たなければならないことは問題ありません。
これをあきらめてwindow.locationを使用する必要がありますか?.live()と.die()を使用して解決できますか?
ここでの最初の投稿の前に、十分な調査を行ったことを願っています。ありがとう!