Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   qooxdoo. Как нажать на элемент страницы? (https://javascript.ru/forum/events/73323-qooxdoo-kak-nazhat-na-ehlement-stranicy.html)

Mukhtar 06.04.2018 06:05

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

laimas 06.04.2018 06:57

Это же кнопка Send будет?

Mukhtar 06.04.2018 07:26

Send тоже не работает. :(

laimas 06.04.2018 07:32

В чем заключается не работа?
Сейчас щелчок по ней с незаполненными и не выбранными полями формы выдает сообщение об ошибках заполнения. А надо что-то иное?

Mukhtar 06.04.2018 08:48

Нет. Нужно просто нажать эту кнопку с консоли.
Я пишу расширения для Chrome, которое будет заполнять такие формы и нажимать на кнопки.

То есть манипуляция формой будет происходить не человеком, а приложением.

laimas 06.04.2018 09:20

<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() и тоже проблем не будет.

Что-то вы своем приложении ...

Mukhtar 06.04.2018 09:33

Выполнил в консоле на странице
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')
}


Сам алерт на странице не сработал.
такое ощущение, что на саму кнопку никаких событий по клику не повешено.

laimas 06.04.2018 09:43

Ошибки видимо у вас есть.

Mukhtar 06.04.2018 10:42

Ошибок никаких консоль не выводит.
Думаю дело в самом объекте.

laimas 06.04.2018 12:19

Хотите сказать, что код имеющий только то, что я написал, у вас вызывает проблемы?

Mukhtar 06.04.2018 12:55

нет. проблем он не вызывает. сама форма на клик не реагирует просто.

laimas 06.04.2018 13:07

Ну в общем-то у вас как таковой формы и нет, чего там вообще имеется я даже разбираться не стал - заказал редактору вырезать все в тегах, ибо там черт ногу сломит, и взял результат.

А что еще реально у вас есть на странице, что может мешать и т.п., я не знаю.

Mukhtar 06.04.2018 13:39

Хорошо. Спасибо. Буду разбираться.

Dilettante_Pro 06.04.2018 14:22

В консоли на страничке работает такой вариант:
document.querySelector('.qx-button-box').onclick = function() {
    alert('Working')
}

и после этого
document.querySelector('.qx-button-box').click();

Mukhtar 06.04.2018 15:00

Цитата:

В консоли на страничке работает такой вариант:
document.querySelector('.qx-button-box').onclick = function() {
alert('Working')
}

и после этого
document.querySelector('.qx-button-box').click();

Это я тоже пытался сделать.
alert сработал, но фактически нажатия на кнопку не произошло.
Если по пустой форме в предоставленном примере нажать физически на кнопку Send, то незаполненные поля подсвечиваются красным цветом.

При отработке Вашего скрипта alert также вывелся, но событие не отработало, после alert-а вывелось сообщение undefined

Dilettante_Pro 06.04.2018 17:04

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, но что-то не срабатывает - какие-то замысловатые проверки состояний.

j0hnik 07.04.2018 01:56

Dilettante_Pro,
даже мышкой если больше секунды mousedown задержишь, на mouseup уже ничего не произойдет

Mukhtar 07.04.2018 11:47

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

Mukhtar 09.04.2018 12:55

На будущее. Если кому понадобится.
Клик мышью решается таким образом
qx.event.Registration.fireEvent(document.querySelector("body > div:nth-child(2) > div:nth-child(1) > div.qx-white-box > div:nth-child(7)"), "tap");

Dilettante_Pro 09.04.2018 13:31

Mukhtar,
Один раз срабатывает с кучей ошибок в консоли. Как кликнуть еще раз?

Mukhtar 29.04.2018 12:07

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, время: 04:01.