7

我有这个简单的选择:

<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还有什么解决办法吗?


这似乎确实是一个错误,并且已向 jQuery 报告:

http://dev.jquery.com/ticket/5869

已经应用了一个补丁,并将成为 jQuery 1.4.1 的一部分。

http://github.com/jquery/jquery/commit/435772e29b4ac4ccfdefbc4045d43f714e153381

4

5 回答 5

3

来自http://jquery14.com/day-01/jquery-14

changesubmit事件规范化(更改文档,提交文档)

对于正常和实时事件,更改和提交事件在浏览器中可靠地工作。我们覆盖 Internet Explorer 中的正常更改和提交事件,并将它们替换为与其他浏览器工作相同的事件。

好的,这看起来像是一个错误,无论是在 IE 还是 JQuery 中。

导致问题的原因是选项上的 selected="selected" 属性导致更改事件在任何鼠标事件发生之前触发。我的猜测是,这是 IE 的一个奇怪/错误,因为它似乎没有设置选定的元素直到它可见,因此导致更改甚至在初始下拉菜单中触发。我说这是 IE 中的错误,因为如果我调用 window.event.cancelBubble,事件处理程序根本不会触发。

这真的很奇怪。

解决方法是删除选定的属性。

于 2010-01-19T18:28:08.943 回答
3

这是此错误的修复:http: //github.com/mcurry/jquery/commit/a293f5938eb9efd41158b948f487672d43b7c820

希望它会进入 1.4.1

于 2010-01-22T19:24:54.443 回答
0

我不确定它是否应该以这种方式工作,但您正在访问this.valuethis.name在同一个回调中。我假设this指的是event.currentTarget,在这种情况下是 SELECT 元素。

在这种情况下,this.value将是未定义的,但您可以尝试使用$(this).val();

你试过安慰变量吗?

于 2010-01-19T11:51:05.187 回答
0

即使使用 1.4.1,我仍然遇到类似的问题。

使用以下示例:

  1. 从选择列表中选择一个值 - 出现警告(正确)。
  2. 单击更改链接 - 选择列表重置为 0(正确)。
  3. 单击选择列表 - 出现一个警报。(错误的)

1.3.2中没有出现第三步的alert。

<!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>
于 2010-01-27T18:43:12.913 回答
-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;  
});
于 2010-01-19T11:48:28.347 回答