[javascript] هل يمكنني الاتصال بـ jquery click () لمتابعة رابط <a> إذا لم أقم بربط معالج أحداث به بربط أو انقر بالفعل؟



Answers

خيار آخر هو بالطبع استخدام javascript الفانيلا فقط:

document.getElementById("a_link").click()
Question

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

لقد لاحظت بعض السلوك الغريب click() وأنا أحاول أن أفهم ما يحدث ولماذا.

أنا أستخدم Firefox لكل ما أصفه في هذا السؤال ، ولكني مهتم أيضًا بما ستفعله المتصفحات الأخرى بهذا.

إذا لم أقم باستخدام $('a').bind('click',fn) أو $('a').click(fn) لتعيين معالج أحداث ، ثم اتصل بـ $('a').click() يبدو أنه لا يفعل شيئًا على الإطلاق. لا يستدعي المعالج الافتراضي للمستعرض لهذا الحدث ، حيث لا يقوم المتصفح بتحميل الصفحة الجديدة.

ومع ذلك ، إذا قمت بتعيين معالج أحداث أولاً ، فإنه يعمل كما هو متوقع ، حتى إذا لم يفعل معالج الحدث أي شيء.

$('a').click(function(){return true;}).click();

هذا تحميل الصفحة الجديدة كما لو كنت قد نقرت على نفسي.

لذا فإن سؤالي ذو شقين: هل هذا السلوك غريب لأنني أقوم بشيء خاطئ في مكان ما؟ ولماذا لا تقوم نداء click() بأي شيء مع السلوك الافتراضي إذا لم أقم بإنشاء معالج خاص بي؟

تصحيح:

كما حدد هوفمان عندما حاول تكرار نتائجي ، فإن النتيجة التي وصفتها أعلاه لا تحدث في الواقع. لست متأكداً من سبب الأحداث التي لاحظتها بالأمس ، لكنني متأكد اليوم أنها لم تكن ما وصفته في السؤال.

إذاً ، الإجابة هي أنه لا يمكنك "زيف" النقرات في المستعرض وأن جميع jQuery يقوم باستدعاء معالج الحدث الخاص بك. لا يزال بإمكانك استخدام window.location لتغيير الصفحة ، وهذا يعمل بشكل جيد بالنسبة لي.




تشغيل عنصر ارتباط تشعبي موجود داخل العنصر الذي تريد ربطه بمسج .click ()

<div class="TopicControl">
    <div class="articleImage">
       <a href=""><img src="" alt=""></a>
    </div>
</div>

في البرنامج النصي الخاص بك ، تقوم بالربط إلى الحاوية الرئيسية التي تريد أن تنقر عليها. ثم تستخدم منهجية jquery القياسية للعثور على العنصر (النوع والفئة والمعرف) وإشعال النقرة. ما يحدث هو دخول jquery دالة متكررة لإطلاق النقرة وكسر الدالة العودية عن طريق أخذ الدالة 'e' و stopPropagation () وإرجاع false لأنك لا ترغب في عمل jquery لفعل أي شيء آخر ولكن إطلاق الرابط.

$('.TopicControl').click(function (event) {
         $(this).find('a').click();
        event.stopPropagation();
        return false;
     });

الحل البديل هو التفاف الحاويات في العنصر ومكان كحاويات داخل بدلاً من. تعيين الامتدادات لعرض كتلة لتتوافق مع معايير w3c.




لفتح ارتباط تشعبي في نفس علامة التبويب ، استخدم:

$(document).on('click', "a.classname", function() {
    var form = $("<form></form>");
    form.attr(
    {
        id     : "formid",
        action : $(this).attr("href"),
        method : "GET",
    });

    $("body").append(form);
    $("#formid").submit();
    $("#formid").remove();
    return false;
});



تعتبر معالجات النقر على علامات الربط حالة خاصة في jQuery.

أعتقد أنك قد تشعر بالحيرة بين حدث onclick للمكالمة (المعروف بالمستعرض) وحدث النقر الخاص بعنصر jQuery الذي يلف مفهوم DOM لعلامة الارتساء.

يمكنك تنزيل مصدر jQuery 1.3.2 here .

الأقسام ذات الصلة من المصدر هي خطوط 2643-2645 (لقد قسمت هذا إلى عدة أسطر لتسهيل فهمها):

// Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
if (
     (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && 
       elem["on"+type] && 
       elem["on"+type].apply( elem, data ) === false
   )
     event.result = false;



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

// For modren Browsers
$(ele).trigger("click");

// Relaying on Paul Irish's conditional class names http://bit.ly/HWIpAp (via HTML5 Boilerplate http://bit.ly/HUzi3I) where each IE version gets a class of its Version
$("html.ie7").length && (function(){
    var eleOnClickattr = $(ele).attr("onclick") 
    eval(eleOnClickattr);
  })()





Links