У меня есть этот простой выбор:
и на нем существует:
$('#items_per_page').change(function(){
var controller_action = this.name.replace(/_/g, '/');
location.href = config.base_url + '/' + controller_action + '/'+this.value;
});
Это раньше работало в jQuery 1.3, но в 1,4 запущено событие изменения, как только я нажимаю на избранное поле. Есть ли какое-либо решение помимо возвращения к 1,3?
Это действительно, кажется, ошибка, и о ней сообщили jQuery:
http://dev.jquery.com/ticket/5869
Был примененный патч и будет частью jQuery 1.4.1.
http://github.com/jquery/jquery/commit/435772e29b4ac4ccfdefbc4045d43f714e153381
Вот исправить эту ошибку: http://github.com/mcurry/jquery/commit/a293f5938eb9efd41158b948f487672d48f487672d43b7c820
Надеюсь, он будет в 1.4.1
из http://jquery14.com/day-01/jquery-14
Изменить
иОтправить
События Нормализовано (смена документации, Отправить документацию)Изменить и представить события работы надежно через браузеры для обоих нормальные и живые события. Мы отменяем нормальные изменения и отправки событий в Internet Explorer и заменить их с событиями, которые работают идентично Другие браузеры.
Хорошо, это похоже на ошибку, либо в IE или jQuery.
Что вызывает эту проблему, является выбранным = «выбранным» атрибутом на параметрах, вызывает событие изменений, прежде чем происходит какое-либо событие мыши. Я предполагаю, что это странность / ошибка с IE, как кажется, что он не устанавливает выбранный элемент до тех пор, пока он не виден, что вызывает изменение даже для огня при первоначальном раскрывающемся списке. Я говорю, что это ошибка в IE, потому что если я позвоню Window.event.cancelBubble, обработчик событий вообще не огонь.
Это действительно странно.
Обходной путь состоит в том, чтобы удалить выбранный атрибут.
Я не уверен, что он должен работать таким образом, но вы обращаетесь к this.value
и . Имейте
в одном обратном вызове. Я бы предположил, что это
относится к Event.CurrentTarget
, что в этом случае является элементом выбора.
В этом случае it.value
будет неопределен, но вы можете попробовать использовать $ (это) .val ();
вместо.
Вы пытались утешить переменные?
Вы можете использовать размытие () событие jQuery. Возможно, что-то вроде этого:
var defaultValue = 10;
$('#items_per_page').blur(function(){
if ($("#items_per_page").val() == defaultValue)
return; //The value wasn't changed, so return.
var controller_action = this.name.replace(/_/g, '/');
location.href = config.base_url + '/' + controller_action + '/'+this.value;
});
Я все еще получаю подобную проблему даже с 1.4.1.
Используя пример ниже:
Уведомление на третьем шаге не отображается в 1.3.2.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#dropDownList1').bind('change',function(){ alert("changed"); });
$('#btnChange').click(function(){
$('#dropDownList1')[0].selectedIndex = 0;
});
});
</script>
</head>
<body>
<select id="dropDownList1">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<a href="#" id="btnChange">Change</a>
</body>
</html>