Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Двойной вызов функции (https://javascript.ru/forum/jquery/23840-dvojjnojj-vyzov-funkcii.html)

Tmin10 08.12.2011 14:35

Двойной вызов функции
 
Есть простой код:
$(".rbutton").click(function() {
	upNumbers();
});
function upNumbers ()
{
	$('#numbers').html("Всего в наличии: <img src='img/ajax-loader1.gif' alt='loading...'/>");
	var mtype = DoIt('labeled');
	$.post('test.php', {act:'ajax_num', type:mtype}, function(text){ 
		$('#numbers').html('Всего в наличии: <b>'+text+'</b>')
	}, 'text');
};

При клике по радио кнопкам вызов upNumbers происходит 2 раза, со старым значением и с новым, в следствии чего отображаются данные для старого или нового запроса с 50% вероятностью.
Функция DoIt просто возвращает номер выделенной радиокнопки в группе.
Почему вызов функции click происходит ещё до смены выделения и после?

ksa 08.12.2011 14:40

Цитата:

Сообщение от Tmin10
При клике по радио кнопкам вызов upNumbers происходит 2 раза

Не верю. (с) Станиславский

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
$(document).ready(function(){
	$(':radio').click(function(){
		alert('Test...');
	});
});
</script>
</head>
<body>
<input type='radio' name='test' />
<input type='radio' name='test' />
<input type='radio' name='test' />
</body>
</html>


Вызов происходит только 1 раз...

Tmin10 08.12.2011 14:50

Как бы это показать...
Специально оставил в коде только
$(".rbutton").click(function() {
	alert('1');
};

Но я вижу это сообщение 2 раза...

Tmin10 08.12.2011 14:58

Вот, укоротил код, оставив тока боксы:
<!DOCTYPE html>

<html>
	<head>
		<meta charset="utf-8">
		<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
		<script type="text/javascript">
			$(document).ready(function(){	
				$(".rbutton").click(function() {
					alert('1');
				});
			});
		</script>
	</head>
	<body>	
		<p class="rbutton"><input type="radio" name="labeled" value="1" id="labeled_1" checked="checked"><label for="labeled_1">1</label></p>
		<p class="rbutton"><input type="radio" name="labeled" value="2" id="labeled_2"><label for="labeled_2">2</label></p>
		<!--<p class='rbutton'><input type='radio' name='labeled' value='3' id='labeled_3' /><label for='labeled_3'>3</label></p>
		--><p class="rbutton"><input type="radio" name="labeled" value="4" id="labeled_4"><label for="labeled_4">4</label></p>
		<p class="rbutton"><input type="radio" name="labeled" value="5" id="labeled_5"><label for="labeled_5">5</label></p>
		<p class="rbutton"><input type="radio" name="labeled" value="6" id="labeled_6"><label for="labeled_6">6</label></p>
		<p class="rbutton"><input type="radio" name="labeled" value="7" id="labeled_7"><label for="labeled_7">7</label></p>
	</body>
</html>

Tmin10 08.12.2011 15:01

Понял в чём дело, но как это исправить, т.е. чтобы при клике по лабелу не активировалось 2 раза

ksa 08.12.2011 15:04

Цитата:

Сообщение от Tmin10
при клике по лабелу

Вот... Раскололся таки. :D Как вариант, замени лабель на спан...

Tmin10 08.12.2011 15:10

Но тогда чекбокс выделяться не будет, придётся ещё код и для него писать...
А это уже повторение функционала браузера...

Наверное надо не по клику, а по измениею состояния боксов...

ksa 08.12.2011 15:13

Tmin10, выбирать тебе... :)

Tmin10 08.12.2011 15:19

Если вдруг кому-то поможет, то я сделал так:
$("[name=labeled]").change(function() { });

ksa, спасибо Вам!


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