qooxdoo. Как нажать на элемент страницы?
Добрый день, форумчане!
Бьюсь уже 3 часа и не могу понять почему событие focus на форме срабатывает, а событие click игнорируется. qx.bom.Event.fire(document.querySelector("body > div:nth-child(2) > div > div.qx-white-box > div:nth-child(7) > div"), "focus"); - работает безотказно qx.bom.Event.fire(document.querySelector("body > div:nth-child(2) > div > div.qx-white-box > div:nth-child(7) > div"), "click"); - не работает. Помогите, пожалуйста?! тестовая форма здесь http://www.qooxdoo.org/5.0.1/demobro...data/Form.html |
Это же кнопка Send будет?
|
Send тоже не работает. :(
|
В чем заключается не работа?
Сейчас щелчок по ней с незаполненными и не выбранными полями формы выдает сообщение об ошибках заполнения. А надо что-то иное? |
Нет. Нужно просто нажать эту кнопку с консоли.
Я пишу расширения для Chrome, которое будет заполнять такие формы и нажимать на кнопки. То есть манипуляция формой будет происходить не человеком, а приложением. |
<html> <head> </head> <body> <div>female</div> <div> <div> <div class="qx-white-box"> <div>Name:</div> <input type="text"/> <div>Gender:</div> <div> <div> <div>-please select-</div> </div> <div></div> </div> <div>Ok:</div> <div> <div></div> </div> <div> <div>Send</div> </div> </div> <div> <div>Registration</div> </div> </div> </div> <script> document.querySelector("body > div:nth-child(2) > div > div.qx-white-box > div:nth-child(7) > div").onclick = function() { alert('Working') } </script> </body> </html> Выполните в консоли document.querySelector("body > div:nth-child(2) > div > div.qx-white-box > div:nth-child(7) > div").click() и тоже проблем не будет. Что-то вы своем приложении ... |
Выполнил в консоле на странице
http://www.qooxdoo.org/5.0.1/demobro...data/Form.html document.querySelector("body > div:nth-child(2) > div > div.qx-white-box > div:nth-child(7) > div").onclick = function() { alert('Working') } только в консоль вывел сообщение: function () { alert('Working') } Сам алерт на странице не сработал. такое ощущение, что на саму кнопку никаких событий по клику не повешено. |
Ошибки видимо у вас есть.
|
Ошибок никаких консоль не выводит.
Думаю дело в самом объекте. |
Хотите сказать, что код имеющий только то, что я написал, у вас вызывает проблемы?
|
нет. проблем он не вызывает. сама форма на клик не реагирует просто.
|
Ну в общем-то у вас как таковой формы и нет, чего там вообще имеется я даже разбираться не стал - заказал редактору вырезать все в тегах, ибо там черт ногу сломит, и взял результат.
А что еще реально у вас есть на странице, что может мешать и т.п., я не знаю. |
Хорошо. Спасибо. Буду разбираться.
|
В консоли на страничке работает такой вариант:
document.querySelector('.qx-button-box').onclick = function() { alert('Working') } и после этого document.querySelector('.qx-button-box').click(); |
Цитата:
alert сработал, но фактически нажатия на кнопку не произошло. Если по пустой форме в предоставленном примере нажать физически на кнопку Send, то незаполненные поля подсвечиваются красным цветом. При отработке Вашего скрипта alert также вывелся, но событие не отработало, после alert-а вывелось сообщение undefined |
Mukhtar,
В этой форме хитрая защита по событиям, чтобы клик делался именно мышью. В частности, _applyEnabled:function(s,r){qx.ui.form.Button.prototype._applyEnabled.call(this,s,r);if(!s){if(this.isCapturing()){this.releaseCapture();} ;this.removeState(h);this.removeState(l);this.__nU();} ;} ,_onPointerOver:function(e){if(!this.isEnabled()||e.getTarget()!==this){return;} ;if(this.hasState(l)){this.removeState(l);this.addState(h);this.__eg.start();} ;this.addState(c);} ,_onPointerOut:function(e){if(!this.isEnabled()||e.getTarget()!==this){return;} ;this.removeState(c);if(this.hasState(h)){this.removeState(h);this.addState(l);this.__eg.stop();} ;} ,_onPointerDown:function(e){if(!e.isLeftPressed()){return;} ;this.capture();this.__nT();e.stopPropagation();} ,_onPointerUp:function(e){this.releaseCapture();if(!this.hasState(l)){this.addState(c);if(this.hasState(h)&&!this.__nS){this.execute();} ;} т.е. по идее должно срабатывать на document.querySelector('[qxclass="qx.ui.form.Button"]') по последовательности событий mouseover-mousedown-mouseup, но что-то не срабатывает - какие-то замысловатые проверки состояний. |
Dilettante_Pro,
даже мышкой если больше секунды mousedown задержишь, на mouseup уже ничего не произойдет |
Dilettante_Pro, Все дело во фреймворке.
В документации смотрел, вся информация ссылается именно на команду qx.bom.Event.fire(document.querySelector("body > div:nth-child(2) > div:nth-child(1) > div.qx-white-box > div:nth-child(6) > div"), "click"); Сам клик может быть и срабатывает, но будто на объекте нет никакого события. Хотя если физически нажать он вызывает какие-то проверки. Нужен реально монстр фреймворка QooxDoo |
На будущее. Если кому понадобится.
Клик мышью решается таким образом qx.event.Registration.fireEvent(document.querySelector("body > div:nth-child(2) > div:nth-child(1) > div.qx-white-box > div:nth-child(7)"), "tap"); |
Mukhtar,
Один раз срабатывает с кучей ошибок в консоли. Как кликнуть еще раз? |
if (qx.event.Registration.fireNonBubblingEvent(arrow, 'tap')){
console.log('tapped arrow'); qx.bom.Event.fire(arrow, 'pointerdown'); qx.bom.Event.fire(arrow, 'pointerup'); } Я так реализовал. arrow = selector объекта |
Часовой пояс GMT +3, время: 23:51. |