2016-05-13 13 views
0

ich auf ausgewählten Tags wie dies ein OnChange-Ereignis habe die Einrichtung:Select-Tag onChange arbeitet nicht auf mobilen

Dictionary.prototype.setSelectEvent = function setSelectEvent() { 
    var selects = document.querySelectorAll('.dictionary-page__select'); 

    if (selects) { 
     for (var i = 0; i < selects.length; i++) { 
      selects[i].onchange = function() { 
       this.onChange(); 
      }.bind(this); 
     } 
    } 
}; 

Diese auf dem Desktop funktioniert gut. Das Ereignis wird ordnungsgemäß festgelegt und ohne Fehler ausgelöst. Auf Mobilgeräten wird das Ereignis überhaupt nicht ausgelöst. Ich habe es auch mit Onblur versucht, aber das hat nichts getan. Wie kann ich mit einem Vanilla-Javascript ein Ereignis auf einem ausgewählten Tag festlegen und es auf Mobilgeräten funktionieren lassen?

Lösung: Third-Party-Bibliothek überschrieb Desktop-Ereignisse, aber nicht mobile. Musste das Auswahlobjekt im Ereignis übergeben.

Dictionary.prototype.setSelectEvent = function setSelectEvent() { 
    var selects = document.querySelectorAll('.dictionary-page__select'); 

    var that = this; 

    if (selects) { 
     for (var i = 0; i < selects.length; i++) { 
      selects[i].onchange = function() { 
       that.onChange(this); 
      }; 
     } 
    } 
}; 
+0

Könnten Sie bitte Ihre HTML hinzufügen? – JohannesB

+0

Sollte nicht 'für (var i = 0; i JohannesB

+0

Ja, das war nur ein Tippfehler. Fest. Ich habe das Problem gefunden. Ich benutzte eine JavaScript-Bibliothek von Drittanbietern, um das select-Tag zu stylen. Es überlagert meine Ereignisse auf dem Desktop, aber nicht auf dem Handy, was zu einer großen Anzahl von Problemen führte. Wie auch immer, das Problem ist gelöst. Danke für deinen Beitrag. –

Antwort

1
Dictionary.prototype.setSelectEvent = function setSelectEvent() { 
    var selects = document.querySelectorAll('.dictionary-page__select'); 

    for (var i = 0; i < selects.length; i++) { 
     selects[i].onchange = this.onChange.bind(this); 
    } 
}; 

Der obige Code sollte tun, was Sie suchen, integriert über den NodeList es bis selects.length. Auch Sie werden feststellen, dass Sie direkt an this binden können, müssen wir nicht jedes Mal eine neue onChange-Funktion definieren, die eine onChange-Methode auf dem Dictionary aufruft.

Edit: die Konvertierung in ein Array entfernt.

+0

Warum müssen Sie die 'NodeList' in ein Array konvertieren? 'NodeList' ist Array-ähnlich, Sie können' selectList.length' und 'selectList [i]' verwenden. – Barmar

+0

In diesem Fall hast du recht, wir machen nichts, was mit der NodeList nicht direkt gemacht werden kann, behoben. Toller Punkt! – sheeldotme

Verwandte Themen