我有这个简单的选择:
<select name="zlecenia_index_icpp" id="items_per_page">
<option value="10">10</option>
<option value="25" selected="selected">25</option>
<option value="50">50</option>
</select>
然后就是:
$('#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之外还有什么解决方案吗?
这似乎是一个bug,并且已经报告给jQuery:
http://dev.jquery.com/ticket/5869
已经应用了补丁,它将成为jQuery 1.4.1的一部分。
http://github.com/jquery/jquery/commit/435772e29b4ac4ccfdefbc4045d43f714e153381
答案 0 :(得分:3)
来自http://jquery14.com/day-01/jquery-14
change
和submit
个事件 规范化(更改文档, 提交文档)更改和提交事件有效 可靠地跨浏览器两者 正常和现场活动。我们覆盖 正常的变化和提交事件 Internet Explorer并替换它们 与事件相同的事件 其他浏览器。
好吧,这看起来像是IE或JQuery中的错误。
导致问题的原因是选项上的selected =“selected”属性导致在发生任何鼠标事件之前触发更改事件。我的猜测是,这是IE的一个奇怪/错误,因为它似乎没有设置所选元素UNTIL它是可见的,因此导致更改甚至在初始下拉列表时触发。我说这是IE中的一个错误,因为如果我调用window.event.cancelBubble,事件处理程序根本不会触发。
这真的很奇怪。
解决方法是删除所选属性。
答案 1 :(得分:3)
以下是此错误的解决方法: http://github.com/mcurry/jquery/commit/a293f5938eb9efd41158b948f487672d43b7c820
希望它能进入1.4.1
答案 2 :(得分:0)
我不确定它是否应该以这种方式工作,但您在同一个回调中访问this.value
和this.name
。我认为this
引用event.currentTarget
,在这种情况下是SELECT元素。
在这种情况下,this.value
将是未定义的,但您可以尝试使用$(this).val();
。
您是否尝试过安慰变量?
答案 3 :(得分:0)
即使使用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>
答案 4 :(得分:-4)
您可以使用jquery的blur()事件。也许是这样的:
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;
});