Soru JavaScript'te bir öğeyi program aracılığıyla nasıl tıklarım?


IE'de, JavaScript'ten element.click () öğesini çağırabilirim - Firefox'ta aynı görevi nasıl gerçekleştirebilirim? İdeal olarak, çapraz tarayıcıyı eşit derecede iyi çalıştıracak bazı JavaScript'lere sahip olmak isterdim, ancak gerekirse bunun için tarayıcı başına farklı JavaScript'im olacak.


44
2018-04-30 21:01


Menşei


Bu soruya da cevap verildi İşte.
Lütfen kabul et cevabım Bir çözüm olarak, birden çok kullanıcı istediği gibi. - Iulian Onofrei


Cevaplar:


document.createEvent belgeleme diyor ki " etkinlik oluşturmak yöntem kullanımdan kaldırıldı. kullanım etkinlik kurucuları yerine."

Yani bunun yerine bu yöntemi kullanmalısınız:

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

ve bunun gibi bir element üzerinde ateşleyin:

element.dispatchEvent(clickEvent);

gosterildigi gibi İşte.


53
2018-03-18 02:07



benim için hem firefox hem de kromda çalışan tek kişi - deej
mevcut olan '09'dan beri ve kullanımdan kaldırılmış işlevler kullandığından belki cevap olarak kabul edilmeli - Iulian Onofrei
Chrome için mükemmel bir çözüm. Daha sonra yürüten öğeyi almak için kod dispatchEvent(clickEvent); benim için: var element = document.getElementById("id-tag"); - kbpontius


Firefox bağlantıları için "özel" gibi görünüyor. Bu çalışmayı gerçekleştirebilmemin tek yolu, createEvent'i kullanmaktı. MDN'de burada açıklanmıştır ve initMouseEvent işlevini çağırın. Bu tamamen işe yaramadı bile, tarayıcıya bir bağlantı açmasını manuel olarak söylemem gerekiyordu ...

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;
    }
}

30
2018-04-30 23:42



window.open'den (element.href, element.target) nasıl farklıdır - Firefox'umda tam olarak aynı şekilde çalışır ve çirkin sarı çubuğu görüntüler - iirekm
MouseEvent öğesinin üçüncü son parametresini true olarak ayarlarsanız (metaKey (CMD) düğmesinin tıklatıldığında basılı tutulduğu anlamına gelir), bu sekmeyi arka plan sekmesinde açmaz, değil mi? Yoksa öyle mi? - Magne


kullanma jQuery tam olarak aynı şeyi yapabilirsiniz, örneğin:

$("a").click();

Hangi sayfada tüm çapalar "tıklayacak".


21
2018-04-30 21:10



Sadece bir not olarak, bu çalışma href onclick'i kullandığında, örn. <a onclick="someFunction()>Click me</a> ama bu formatı kullanırken değil <a href="javascript:someFunction()">Click me</a> - Jacob Mouka


element.click () tarafından ana hatlarıyla belirtilen standart bir yöntemdir. W3C DOM özelliği. Mozilla'nın Gecko / Firefox'u standardı takip eder ve sadece bu yöntemin INPUT elemanlarında çağrılmasına izin verir.


10
2018-04-30 21:12



INPUT olmayan öğelerdeki tıklamaları programlı olarak simüle etmek istediğimde anlaşılır, ancak yardımcı olmaz. - Bruce


Bağlantıyı takip etmeye mi çalışıyorsunuz, yoksa onclick'i mi tetikliyorsunuz? Böyle bir şeyle bir onclick'i tetikleyebilirsiniz:

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

8
2018-04-30 21:13



ilginç, bunu deneyeceğim. Bu bir test kayışının bir parçasıdır, bu nedenle, hangi spesifik öğenin tıklanacağını önceden bilmeyiz - test vakası ne olursa olsun. - Bruce
Bir bağlam belirtmeniz gerekmez; onclick 'link' özelliği olduğundan, içerik zaten uygun şekilde ayarlanacaktır. - James
Bu, Chrome'da çalışmadı. Konsolda "çağrı" yönteminin mevcut olmadığını belirten bir hata oluştu. - kbpontius
Yanlış yazmış olmalısın. call () bölümdür İşlev prototipi. Kesinlikle orada. - jiggy


İşte bir çapraz tarayıcı çalışma işlevi (tıklama işleyicileri için de kullanılabilir):

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);
    }
}

7
2018-04-30 21:27



Kullanmam gerektiğini buldum el[etype](); IE'nin yerel olayı tetiklemesini sağlamak için 3. sırada (bir tıklama işleyiciyle test ediyordum) - bkz. jsfiddle.net/Pc8qE) - Lessan Vaezi
Bunu işe almak için, firefox için bir tip gönderim girdisi ve IE için bir tür düğme girdisi kullanmam gerekti.


Yukarıda listelenen KooiInc işlevini kullandım, ancak IE için bir 'düğme' ve FireFox için bir 'gönderme' olmak üzere iki farklı giriş türü kullanmak zorunda kaldım. Tam olarak neden emin değilim ama işe yarıyor.

// HTML

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

// JavaScript’te

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);
}

Arama yaptım ve birçok öneride bulundum ama sonuçta bu işe yaradı. Eğer biraz daha zamana sahip olsaydım, gönderim neden FF ve IE ile butonun neden çalıştığını araştırmak isterdim, ama şu anda bir sonraki sorun için lüks olurdu.


1
2018-02-20 12:29