3

我正在使用jQuery Autocomplete进行产品查找。我正在使用以下代码强制从列表中进行选择:

$(".force-selection").blur(function(e) {
  var value = $(this).val();
  //check if the input's value matches the selected item
  alert($(this).val());
  alert($(this).data('selected-item'));
  if(value != $(this).data('selected-item')) {
    //they don't, the user must have typed something else
    $(this)
      .val('') //clear the input's text
      .data('selected-item', ''); //clear the selected item
  }
});

上面的代码仅在删除两个警报语句时才有效。为什么行为会仅基于几个警报语句的存在而改变?

4

2 回答 2

2

尝试切换到使用自动完成更改事件而不是模糊事件。

  • 作为init创建自动完成时的一个选项:

    $(".selector").autocomplete({
       change: function(event, ui) { ... }
    });
    
  • 或按类型绑定到更改事件:autocompletechange。

    $(".selector").bind("autocompletechange", function(event, ui) {
       ...
    });
    
于 2012-07-25T17:34:38.327 回答
1

这可能是由几个问题引起的。

如果您使用的是 Internet Explorer,alert则会在您正在处理的任何字段上触发“模糊”事件。在您的示例代码中,很明显为什么会导致问题。否则,您可能正在查看竞争条件问题。

在 IE 中查看这个小提琴:http: //jsfiddle.net/NsfKT/

于 2012-07-25T17:34:48.260 回答