2013-06-07 12 views
7

Non riesco a capire come attivare manualmente gli eventi DOM. Qui, per esempio, è il mio tentativo di generare l'evento "click" per un liSencha: Come attivare l'evento click sull'elemento li

Ext.DomQuery.select('#mapRoutesPanel ol li:nth-child('+(index+1)+')')[0].click(); 

Si sta lavorando bene su Google Chrome, ma quando costruire Android app nativa di stessa applicazione mi dà errore

Uncaught TypeError: Object #<HTMLLIElement> has no method 'click' 
+0

Hai provato http://stackoverflow.com/questions/16145882/extjs-manually-firing-click-event-button-param-is-different-from -mouse-clic? –

risposta

-2

Ho fatto come nel mio caso.

Di seguito è riportato il codice html di esempio di div con li s.

<div class="menu1" id="menu1"> 
    <ul> 
    <li id="students_tab">Students</li> 
    <li id="emps_tab">Employees</li> 
    </ul> 
</div> 

E di seguito è il codice extjs per aggiungere l'evento click all'elemento li.

<script type="text/javascript"> 
    Ext.onReady(function(){ 
    var tabs= Ext.query("li", "menu1"); 
    Ext.each(tabs, function(item){ 
     var el = Ext.get(item); 
     el.on("click", function(){ 
      var tabName = this.id.substr(0, this.id.indexOf("_")); 
      alert("U have clicked on "+ tabName + " tab"); 
     }); 
    }); 
    }); 
</script> 
0

Non tutti i browser/app di dispositivi touch supportano l'evento click perché si tratta di un evento del mouse. Perché non provi a utilizzare il sistema di eventi normalizzato di Sencha per associare un gestore di clic al componente, puoi quindi verificare se è stato fatto clic sullo < li/> all'interno del gestore di eventi click del componente.

Sencha ha già svolto il lavoro per noi in modo che possiamo gestire i clic & tap allo stesso modo, quindi approfittane.

Btw, la delega degli eventi da un elemento padre è in genere più performante dei gestori di eventi di associazione a un gruppo di elementi DOM diversi. Sembra che gli eventi vincolanti per gli elementi in un ciclo, questa è una cattiva pratica. Volevo solo farlo notare anche a me.

Ecco un esempio di codice:

var cmp = Ext.getCmp('someComponentId'); 
cmp.on('click', function(me, event) { 
    if (event.currentTarget.tagName == "LI") { 
     // do something since the <li/> tag was clicked. 
     // event.currentTarget will be the <li/> DOM element, 
     // feel free to do with it as you please :) 
    } 
}