سؤال

في IE، يمكنني فقط استدعاء element.click() من JavaScript - كيف يمكنني إنجاز نفس المهمة في Firefox؟من الناحية المثالية، أرغب في الحصول على بعض جافا سكريبت التي من شأنها أن تعمل بشكل جيد عبر المتصفحات، ولكن إذا لزم الأمر، سيكون لدي جافا سكريبت مختلف لكل متصفح لهذا الغرض.

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

المحلول

ال document.createEvent توثيق يقول ان "ال انشاء حدث تم إهمال الطريقة.يستخدم بناة الحدث بدلاً من."

لذلك يجب عليك استخدام هذه الطريقة بدلاً من ذلك:

var clickEvent = new MouseEvent("click", {
    "view": window,
    "bubbles": true,
    "cancelable": false
});

واطلاق النار على عنصر مثل هذا:

element.dispatchEvent(clickEvent);

كما هو مبين هنا.

نصائح أخرى

بالنسبة لروابط فايرفوكس تبدو "خاصة".الطريقة الوحيدة التي تمكنت من خلالها تنفيذ هذا العمل هي استخدام createEvent الموصوفة هنا على MDN واستدعاء الدالة initMouseEvent.حتى أن ذلك لم ينجح تمامًا، كان علي أن أخبر المتصفح يدويًا بفتح رابط ...

var theEvent = document.createEvent("MouseEvent");
theEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var element = document.getElementById('link');
element.dispatchEvent(theEvent);

while (element)
{
    if (element.tagName == "A" && element.href != "")
    {
        if (element.target == "_blank") { window.open(element.href, element.target); }
        else { document.location = element.href; }
        element = null;
    }
    else
    {
        element = element.parentElement;
    }
}

مسج الذي يمكن القيام به بالضبط نفس الشيء، على سبيل المثال:

$("a").click();

والتي سوف "فوق" كل المراسي على الصفحة.

وelement.click () هي الطريقة المعيارية التي حددها في W3C DOM مواصفات . أبو بريص / فايرفوكس موزيلا يتبع مستوى ويسمح فقط هذه الطريقة ليتم استدعاؤها على INPUT العناصر.

هل تحاول اتباع فعلا الارتباط أو تحريك عند _ النقر؟ يمكنك أن تؤدي إلى عند _ النقر بشيء من هذا القبيل:

var link = document.getElementById(linkId);
link.onclick.call(link);

وإليك عبر متصفح وظيفة العمل (يمكن استخدامها لأغراض أخرى غير فوق معالجات أيضا):

function eventFire(el, etype){
    if (el.fireEvent) {
      el.fireEvent('on' + etype);
    } else {
      var evObj = document.createEvent('Events');
      evObj.initEvent(etype, true, false);
      el.dispatchEvent(evObj);
    }
}

ولقد استخدمت وظيفة KooiInc المذكورة أعلاه، ولكن اضطررت لاستخدام نوعين الإدخال المختلفة 'زر' واحد لشركة آي إي واحد "إرسال" لفايرفوكس. ولست متأكدا بالضبط لماذا ولكن يعمل.

و// HTML

<input type="button" id="btnEmailHidden" style="display:none" />
<input type="submit" id="btnEmailHidden2" style="display:none" />

و// في جافا سكريبت

var hiddenBtn = document.getElementById("btnEmailHidden");

if (hiddenBtn.fireEvent) {
    hiddenBtn.fireEvent('onclick');
    hiddenBtn[eType]();
}
else {
    // dispatch for firefox + others
    var evObj = document.createEvent('MouseEvent');
    evObj.initEvent(eType, true, true);
    var hiddenBtn2 = document.getElementById("btnEmailHidden2");
    hiddenBtn2.dispatchEvent(evObj);
}

ولدي بحث وحاول العديد من الاقتراحات ولكن هذا هو ما انتهى العمل. وإذا كان لي مزيد من الوقت كنت أود للتحقيق في سبب تقديم أعمال مع FF وزر مع IE لكن ذلك سيكون ترفا الآن الحق في ذلك إلى مشكلة المقبلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top