بحاجة إلى إلغاء انقر الأحداث / mouseup عندما اكتشف انقر نقرا مزدوجا فوق الحدث

StackOverflow https://stackoverflow.com/questions/1067464

سؤال

وكيف يتم ذلك؟

هل كانت مفيدة؟

المحلول

وهذا سؤال جيد، وأنا في الواقع لا أعتقد أنه يمكن القيام به بسهولة. ( بعض النقاش حول هذا )

وإذا كان السوبر المخادع المهم أن يكون لديك هذه الوظيفة، هل يمكن أن المأجور مثل ذلك:

function singleClick(e) {
    // do something, "this" will be the DOM element
}

function doubleClick(e) {
    // do something, "this" will be the DOM element
}

$(selector).click(function(e) {
    var that = this;
    setTimeout(function() {
        var dblclick = parseInt($(that).data('double'), 10);
        if (dblclick > 0) {
            $(that).data('double', dblclick-1);
        } else {
            singleClick.call(that, e);
        }
    }, 300);
}).dblclick(function(e) {
    $(this).data('double', 2);
    doubleClick.call(this, e);
});

وهنا هو مثال على ذلك في العمل .

وكما أشار في التعليقات، هناك المساعد لهذا أن يفعل ما فعلته فوق حد كبير، ولكن حزم الامر بالنسبة لك لذلك لم يكن لديك لرؤية القبيح: <لأ href = "HTTP: / /plugins.jquery.com/project/FixClick "يختلط =" noreferrer "> FixClick .

نصائح أخرى

وقد ناقش

وريمون تشن بعض الآثار المترتبة على من احد مقابل -double النقر - على الرغم من انه يتحدث في سياق من ويندوز، ما يقوله هو ذات الصلة لتصميم واجهة المستخدم المعتمدة على المتصفح

.

والأساس، ويجب أن تكون الإجراءات المتخذة على النقر المزدوج على الشيء المنطقي القيام به بعد نقرة واحدة. هكذا على سبيل المثال، في واجهة سطح المكتب، انقر فوق واحد يختار عنصر، وانقر مرتين يفتحه (على سبيل المثال يفتح الملف، أو تطلق التطبيق). سوف يكون لدى المستخدم لتحديد ملف لفتحه على أي حال، لذلك لا يهم أن يؤخذ النقر عمل واحد قبل النقر مضاعفة العمل.

إذا كان لديك عنصر واجهة المستخدم التي هي لا علاقة لها تماما إلى النقر عمل واحد، بحيث يصبح من الضروري لمنع النقر عمل واحد من الحدوث مرة يدرك النظام أنه كان في الواقع النقر المزدوج العمل انقر مرتين، ثم هل حقا يجب لإعادة النظر في التصميم الخاص بك. وسيكون للمستخدمين العثور عليه محرجا ومكافحة بديهية، لأنه لن تتصرف في الطريقة التي يتم استخدامها لأشياء تعمل.

إذا كنت لا تزال تريد أن تذهب بهذه الطريقة، فإنك ستضطر إلى استخدام تقنية debouncing (وفي هذه الحالة سيتم تأجيل جميع الإجراءات بنقرة واحدة) وإلا تنفيذ بعض آلية يمكن من خلالها يبطل وانقر نقرا مزدوجا فوق معالج العمل الذي قام به بنقرة واحدة المعالج.

ويجب أيضا أن تكون على علم بأن بعض المستخدمين تعيين طويل جدا انقر نقرا مزدوجا فوق الوقت. شخص ما، على سبيل المثال، قد يكون أيدي التهاب المفاصل بنقرة والوقت مزدوج أكثر من المجموعة الثانية في تفضيلات النظام الخاص بهم، وبالتالي فإن تقنية debouncing استنادا إلى بعض فترة زمنية تعسفية من اختيارك هو الذهاب الى جعل عنصر واجهة المستخدم التي يتعذر الوصول إليها لهؤلاء الناس إذا أخذ النقر عمل واحد يحول دون اتخاذ نقرة مضاعفة العمل. و"التراجع عن ما حدث للتو في نقرة واحدة" الأسلوب هو الحل الوحيد القابل للتطبيق لهذا، بقدر ما أعرف.

وهذه التقنية الواردة في إجابات أخرى كما هو معروف debouncing .

ومسج البريق يوفر حلا أنيقة نظيفة لهذا، من خلال تنفيذ حدث مخصص singleclick. وعند القيام بذلك، يمكنك استخدامها تماما مثل أي حدث آخر، لذلك:

$('#el').singleclick(function(){});
// or event
$('#el').bind('singleclick', function(){});

وكما يوفر الأحداث المخصصة للالنقرات الأخيرة والأولى من سلسلة من النقرات. وحدث مخصص lastclick فعلا يمر كمية الضغطات مرة أخرى! لذلك يمكن أن تفعل ذلك!

$('#el').lastclick(function(event,clicks){
    if ( clicks === 3 ) alert('Tripple Click!');
});

ويمكنك العثور على الشفرة المصدرية لتحديد أحداث مخصصة <لأ href = "http://github.com/balupton/jquery-sparkle/blob/9921fcbf1cbeab7a4f2f875a91cb8548f3f65721/scripts/resources/jquery.events.js#L256" يختلط = "نوفولو noreferrer"> هنا .

وانها مفتوحة المصدر تحت الرخصة AGPL، لذلك يمكنك أن تشعر بالحرية للاستيلاء على ما تحتاج إليه للخروج منه خالية من القلق! :-) كما انها وضعت بنشاط على أساس يومي بحيث أنك لن تكون قصيرة على الدعم.

ولكن الأهم من ذلك هو الإطار DRY المساعد / تأثير للسماح لك لتطوير الإضافات والملحقات بسهولة أكبر بكثير. لذا نأمل أن يكون هذا يساعد على تحقيق هذا الهدف!

وإذا كان هذا هو لزر تقديم نموذج (وهي ليست بالضرورة لالملصق الأصلي، ولكن قد يكون هذا هو الحال لأشخاص آخرين الوصول إلى هنا عبر جوجل)، فإن خيار الأسهل أن يكون لتعطيل العنصر الذي يجري بالضغط على الخاص بك في معالج الحدث انقر فوق:

$(selector).click(function(e) {
    $(this).prop('disable', true);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top