Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Очередность выполнения 2х событий (https://javascript.ru/forum/events/34094-ocherednost-vypolneniya-2kh-sobytijj.html)

zilker 20.12.2012 11:28

Очередность выполнения 2х событий
 
День добрый. Как можно побороть ситуацию - есть инпут, на нем висит обработчик 'change', есть div - на нем висит 'click'. При клике на div, первым срабатывает onchange на инпуте, а только потом клик на div. Можно ли как-то поменять их местами?

Deff 20.12.2012 12:24

zilker,
Выложите HTML код данного куска страницы

zilker 20.12.2012 12:47

<div class="select autocomplete" wrapper="Streets" id="Streets">
	<div class="selecthead">
		<div class="selecttext">
			<div class="selectvalue">
				<input placeholder="выбрать улицу" type="text" />
			</div>
			<div class="lighting"></div>
			</div>
		<input type="hidden" value="" name="streets" id="f-streets"/>
		<div class="arrow"></div>
	</div>
	<div class="selectlist">
		<div class="option">Ленина</div>
	</div>
</div>

Клик на диве с классом 'option', 'onchange' на видимом инпуте.

Deff 20.12.2012 13:12

Цитата:

Сообщение от zilker
При клике на div, первым срабатывает onchange на инпуте, а только потом клик на div.

Не наблюдаю подобного
<div class="select autocomplete" wrapper="Streets" id="Streets">
	<div class="selecthead">
		<div class="selecttext">
			<div class="selectvalue">
				<input placeholder="выбрать улицу" type="text" onchange="Al_2(this)"/>
			</div>
			<div class="lighting"></div>
			</div>
		<input type="hidden" value="" name="streets" id="f-streets"/>
		<div class="arrow"></div>
	</div>
	<div class="selectlist"><br />
		<div class="option" onclick="Al_1(this)">Ленина</div>
	</div>
</div>


<script type="text/javascript">
function Al_1(a){
  alert("onclick")
}
function Al_2(a){
  alert("onchange")
}

</script>

Выложите Ваш скрипт обработки

zilker 20.12.2012 13:23

Можно поинтересоваться, в каком браузере Вы работаете?
Запускаю скрипт из Вашего сообщения -
Опера и мозилла последних версий - сначала onchange, потом onclick
Хром второй алерт с кликом вообще не выводит.

Deff 20.12.2012 13:38

Цитата:

Сообщение от zilker
Можно поинтересоваться, в каком браузере Вы работаете?

Опера 12.10
Мозилла 17.01

zilker 20.12.2012 15:59

Странно, те же самые версии. Очередность моих действий:

1.Вводим что-то в текстовое поле.
2.Нажимаем на текст "Ленина"
3.Выскакивает алерт "onchange"
4.Следующий алерт "onclick"
Что я делаю не так...

Deff 20.12.2012 16:09

Цитата:

Сообщение от zilker
Странно, те же самые версии. Очередность моих действий:

Хм - Ну Все верно, - Вы же изменили текстовое поле, при клике вне поля input сразу де возникает onchang

В начальной задаче было написано первый клик на div,
про первоначальный ввод в инпут речи не велось

Собственно опишите желаемую последовательность и Варианты поведения при ином порядке действий

zilker 20.12.2012 16:35

Да, наверно я неверно выразился. Что мне необходимо:

1.Вводим что-то в инпут
2.Нажимаем на див
3.Срабатывает обработчик onclick на диве
4.Срабатывает обработчик onchange на инпуте

Deff 20.12.2012 17:01

<div class="select autocomplete" wrapper="Streets" id="Streets">
	<div class="selecthead">
		<div class="selecttext">
			<div class="selectvalue">
				<input placeholder="выбрать улицу" type="text" onchange="Al_2(this)"/>
			</div>
			<div class="lighting"></div>
			</div>
		<input type="hidden" value="" name="streets" id="f-streets"/>
		<div class="arrow"></div>
	</div>
	<div class="selectlist"><br />
		<div class="option" onclick="Al_1(this)">Ленина</div>
	</div>
</div>


<script type="text/javascript">
var onch=false;
function Al_2(a){
  onch=a.value
}

function Al_1(a){
  alert("onclick");
  if(onch) {alert(onch)}
  onch=false;
}

</script>


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