Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Редирект и автоматический клик на кнопку (https://javascript.ru/forum/dom-window/36449-redirekt-i-avtomaticheskijj-klik-na-knopku.html)

danik.js 19.03.2013 18:58

Значит нужно поставить точку останова, выполнять пошагово и поглядеть что в скрипте происходит и что идет не так.

Godwar 20.03.2013 13:10

Прошел скрипт по каждой строке.

итог выполнения скрипта:

this -> Window #standart_order
arguments -> []
element -> a.standart_order
hash -> "standart_order"
toString -> function()

Т.е. хеш распознал, но на строке element.click(); клик не происходит

Godwar 20.03.2013 13:56

Есть варианты?

dmitriymar 20.03.2013 14:35

Цитата:

Сообщение от Godwar
Есть варианты?

т.е вы хотите запустить обработчик события клика(какой у вас отсутсвует), но не выполнив клик перейти по ссылке?

1 Переходы по ссылкам, возможны только после клика пользователем на ссылке -политика безопасности браузера
2 Вызов функции обработчика клика , и программная эмуляция клика вещи разные

Godwar 20.03.2013 15:15

Обнаружил любопытную деталь.
когда выполняется скрипт
<script>
	    (function(){
        var hash = location.hash.substring(1);
	        if (hash) {
	            var element = document.querySelector('.' + hash);
	            if (element) {
	                element.click();
	            }
	        }
	    })();
</script>


то уже на строке <if (element)> дебаггер показывает в строке <element.click();> инициализированную переменную "element" как "a.standart_order"
а скрипт a.standart_order.click() через консоль, естесственно, не работает. А вот document.querySelector('.standart_order').click() через консоль работает.

Поэтому я пределал скрипт на такой:
<script type="text/javascript">
	(function(){
	    var hash = location.hash.substring(1);
	    if (hash) {
	        var element = ('.' + hash);
	        if (element) {
	            document.querySelector('element').click();
	        }
	    }
	})();
</script>


Тогда в строке <document.querySelector('element').click();> переменная "element" выглядит как ".standart_order"

Но при этом вываливается ошибка:

TypeError: document.querySelector(...) is null
(?) /checkout/ (строка 782)
() /checkout/ (строка 777)
document.querySelector('element').click(); /checkout/ (строка 782)

Godwar 20.03.2013 15:21

Цитата:

Сообщение от dmitriymar (Сообщение 241689)
т.е вы хотите запустить обработчик события клика(какой у вас отсутсвует), но не выполнив клик перейти по ссылке?

1 Переходы по ссылкам, возможны только после клика пользователем на ссылке -политика безопасности браузера
2 Вызов функции обработчика клика , и программная эмуляция клика вещи разные

document.querySelector('.standart_order').click() отрабатывается, т.е. клик пользователя не требуется.

Godwar 20.03.2013 15:30

Возможно, вы правы, dmitriymar. Даже в этом варианте
<script type="text/javascript">
	(function(){
	    var hash = location.hash.substring(1);
	    if (hash) {
	        var element = document.querySelector('.' + hash);
	        if (element) {
	            document.querySelector('.standart_order').click();
	        }
	    }
	})();
</script>

кнопка не нажимается.
хотя сама по себе строка document.querySelector('.standart_order').click(); через консоль отрабатывается

Godwar 20.03.2013 15:46

<script type="text/javascript">
	(function(){
	    var hash = location.hash.substring(1);
	    if (hash) {
	        var element = document.querySelector('.' + hash);
	        if (element) {
	             alert(hash);
	        }
	    }
	})();
</script>

отрабатывает и показывает текущий хеш

danik.js 20.03.2013 15:47

Странная история. Если элемент был найден, то условие if (element) просто обязано выполниться. Попробуйте убрать условие и всегда вызывать element.click(). Ваши варианты неверные.

Godwar 20.03.2013 16:19

Быть может дело в том, что событие на клик этой кнопки отрабатывает другой скрипт?
<script type="text/javascript">
$(document).ready(function(){
		 $('.standart_order').click(function(){
		 $('#standart-order-block').css("display","block");
		 $('#quick-order-prev').css("display","none");
		 $('#standart-order-prev').css("display","none");
		 $('#credit-order-prev').css("display","none");

                  });


Часовой пояс GMT +3, время: 20:58.