Sencha: как инициировать событие клика на элементе li

Я не смог понять, как вручную запускать события DOM. Вот, например, моя попытка запустить событие «щелчок» для li

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

Он отлично работает в Google Chrome, но когда я создаю собственное приложение для Android того же приложения, это дает мне ошибку

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

person user1812198    schedule 07.06.2013    source источник
comment
Вы пробовали stackoverflow.com/questions/16145882/?   -  person Himanshu Tyagi    schedule 02.09.2014


Ответы (4)


Ext JS предоставляет свои методы для поиска элементов в дереве DOM.


Посмотрите, Sencha Fiddle — это приложение для сенсорного управления, я тестировал его на своем Android (опера) и iphone ( сафари) это работа для меня


Что-то вроде этого:

var liElement = Ext.get('mapRoutesPanel').down('ol li:nth-child(' + (index + 1) + ')');
person Igor Semin    schedule 03.09.2014

Пробовали ли вы Ext.dom.Element -method-fireEvent?

Ext.DomQuery.select('#mapRoutesPanel ol li:nth-child('+(index+1)+')')[0].fireEvent('click')
person Ernesto Ramírez Romero    schedule 03.09.2014

Не все браузеры/приложения для сенсорных устройств поддерживают событие щелчка, поскольку это событие мыши. Почему бы вам не попробовать использовать нормализованную систему событий Sencha для привязки обработчика щелчка к компоненту, а затем вы можете проверить, был ли щелкнут ‹li/› внутри обработчика события щелчка компонента.

Sencha уже сделал всю работу за нас, поэтому мы можем одинаково обрабатывать клики и касания, так что воспользуйтесь этим.

Кстати, делегирование событий от родительского элемента обычно более эффективно, чем привязка обработчиков событий к набору различных элементов DOM. Похоже, что вы привязываете события к элементам в цикле, это плохая практика. Я просто хотел указать и на это.

Вот пример кода:

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 :)
    }
}
person macguru2000    schedule 08.09.2014

Я сделал, как показано ниже в моем случае.

Ниже приведен пример html-кода div с li s.

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

А ниже приведен код extjs для добавления события click к элементу 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>
person Srikanth    schedule 11.06.2013