0

为在所选字段中键入的值自动填充在按键事件中选择的 jquery 中的值。在第一次请求中,这很好。但是对于furthur keypress 事件,这些值将附加到先前附加的选项中。下面是我的回调代码。

success: function(data) {
each(data, function(index) {
$(".chzn-select").append(
$('<option></option>')
.val(data[index])
.html(data[index]));
});
$(".chzn-select").trigger("liszt:updated");
}

是否可以在 ajax 调用之前清除所选的选项值。

4

3 回答 3

0

问题是您使用.append并且从不手动清除数据。随后的 ajax 请求没有以任何方式“连接”到选择/选择框。最简单的方法是在使用之前清除所有选项$(".chzn-select").html("");。但是,这可能会在重置时和每个新项目时导致额外的 DOM 更新。下面的代码预先收集所有选项并一次性插入它们:

// safely store original options in an array. You only need to call
// this once. It's probably best to run this before initiating chosen()
// to avoid possible conflicts.
var originalOptions = [];
$(".chzn-select").children("option").each(function(ind, elm) { 
    originalOptions.push(elm);
});
// init chosen after
$(".chzn-select").chosen();


// (the other code here)

success: function(data) {
  var newOptions = [];
  $.each(data, function(index) {
    newOptions.push($('<option/>').val(data[index]).html(data[index]).get(0));
  });

  // this line will clear *all* entries in the select. Therefore
  // we combine originalOptions and newOptions, so that the original
  // options are kept. If you want the ajax options to be listed first,
  // switch the variables.
  $(".chzn-select").html(originalOptions.concat(newOptions));
  $(".chzn-select").trigger("liszt:updated");
}

希望这对你有用。

于 2013-08-07T13:20:48.363 回答
0

您可以将 jquery 配置为在不缓存的情况下执行 ajax 请求。

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});

有了这个,jQuery 将_在你的 url 上添加一个带有随机数的参数,它会发出不同的请求并将所有内容都发送到服务器,从而避免浏览器缓存。您还可以在$.ajax命令中配置缓存,例如:

$.ajax({
   // configs...
   cache: false,
   // configs...
});
于 2013-08-07T11:05:32.320 回答
0

将以下函数添加到 Chosen.jquery.js

Chosen.prototype.activate_field = function() {
  this.container.addClass("chzn-container-active");
  this.active_field = true;
  this.search_field.val(this.search_field.val());
  this.clear_prev_list();
  return this.search_field.focus();
};


 Chosen.prototype.clear_prev_list = function() {
    return this.container.find("li.active-result").remove(); 
  };

这是解决你的问题

于 2013-10-17T07:03:11.517 回答