Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery插件bsmSelect不';t在再次调用时更新其值,并且其选择选项已更改_Javascript_Jquery - Fatal编程技术网

Javascript jQuery插件bsmSelect不';t在再次调用时更新其值,并且其选择选项已更改

Javascript jQuery插件bsmSelect不';t在再次调用时更新其值,并且其选择选项已更改,javascript,jquery,Javascript,Jquery,我正在使用jQuery插件。基本上,它所做的是更改“选择多重”(select multiple)的渲染方式,以便更轻松地拾取选项。它隐藏select元素,并显示一个列表 首先,我将插件函数应用于我的select multiple元素: $(document).ready(function() { ... $('#my_select_multiple').bsmSelect({ plugins: [$.bsmSelect.plugins.sortable()], title

我正在使用jQuery插件。基本上,它所做的是更改“选择多重”(select multiple)的渲染方式,以便更轻松地拾取选项。它隐藏select元素,并显示一个列表

首先,我将插件函数应用于我的select multiple元素:

$(document).ready(function() {
  ...
  $('#my_select_multiple').bsmSelect({
    plugins: [$.bsmSelect.plugins.sortable()],
    title: 'Add',
    removeLabel: 'Remove'
  });
  ...
});
另一方面,我有另一个select元素(这个元素很简单),它有一个ajax请求绑定到它的变更事件。此ajax请求根据select simple值获取新的
#my_select_多个
选项。Ajax响应是新的HTML,用于
#my\u select\u多个
选项。因此,我:

function getNewOptions(val) {
  var r = $.ajax({
    type: 'GET',
    url: /*My URL*/
  }).responseText;
  return r;
}

...

$(document).ready(function() {
...
  $('#my_select_simple').change() {
    $('#my_select_multiple').html(getNewOptions($(this).val()));
  }
...
});
AJAX正在按预期工作。新选项被正确获取,并被插入到
#my_select_multiple
(bsmSelect插件将其隐藏,但我可以使用Firebug进行检查)。但是bsmSelect没有实现新的更改,也没有得到更新

因此,我想我想要的是重新应用
$(“#我的选择数”)及其新选项

我已经四处看看了,下面是我尝试过的

1。我尝试再次调用函数,调用AJAX请求的
success
complete
(一次一个)。不起作用:

function getNewOptions(val) {
  var r = $.ajax({
    type: 'GET',
    url: /*My URL*/,
    success: function() { $('#my_select_multiple').bsmSelect(); }
  }).responseText;
  return r;
}
$('#my_select_simple').on('change', function() {
  $('#my_select_multiple').bsmSelect();
});
2。我已经尝试将函数与
on
jQuery函数绑定。不起作用:

function getNewOptions(val) {
  var r = $.ajax({
    type: 'GET',
    url: /*My URL*/,
    success: function() { $('#my_select_multiple').bsmSelect(); }
  }).responseText;
  return r;
}
$('#my_select_simple').on('change', function() {
  $('#my_select_multiple').bsmSelect();
});
3。我尝试了1和2删除以前由bsmSelect生成的HTML。没用

多谢各位

更新:确切代码

首先,我有一个
global.js
文件,它将bsmSelect插件应用于一些select倍数(
.quizzes
):

然后,在php文件中,我定义了
updateQuizzes
函数,并将其绑定到select simple(
project\u id
)更改事件:

<script type="text/javascript">
  function updateQuizzes(project_id) {
    var r = $.ajax({
    type: 'GET',
url: '<?php echo url_for('event/updateQuizzes')?>'+'<?php echo   ($form->getObject()->isNew()?'':'?id='.$form->getObject()->getId()).($form->getObject()->isNew()?'?project_id=':'&project_id=')?>'+project_id,
    success: function() { $('.quizzes').bsmSelect({
      plugins: [$.bsmSelect.plugins.sortable()],
      title: 'Add',
      removeLabel: 'Remove'
    }); }
  }).responseText;
  return r;
  }

  $('#project_id').change(function(){
    $('.quizzes').html(updateQuizzes($(this).val()));
  });
</script>

函数updateQuizzes(项目id){
var r=$.ajax({
键入:“GET”,
url:''+''+项目id,
成功:函数(){$('.quizzes').bsmSelect({
插件:[$.bsmSelect.plugins.sortable()],
标题:“添加”,
removeLabel:“移除”
}); }
}).responseText;
返回r;
}
$('#项目_id')。更改(函数(){
$('.quizzes').html(updateQuizzes($(this.val()));
});

正如我所说的,AJAX请求可以正常工作,但第二次调用bsmSelect时不会出现问题

不确定这是否是问题所在,但您可以试试

$('#my_select_simple').change() {
    $('#my_select_multiple').html(getNewOptions($(this).val())).trigger('change');
}

这会触发select_multiple上的更改事件,并可能触发bsmSelect。我不确定这里到底是什么问题,但这是我能想到的最好办法。

我认为您希望在Ajax调用的
成功
中设置HTML,例如:

function loadNewOptions(val) {
    $.ajax({
        type: 'GET',
        url: /*My URL*/,
        success: function(data) { 
            $('#my_select_multiple').html(data).bsmSelect(); 
        }
    });
}
然后打电话说:

$('#my_select_simple').change() {
    loadNewOptions($(this).val());
}
这样的办法应该行得通

.load
将把您的url返回的内容放入
\my\u select\u multiple

第一个参数是要加载的url,第二个参数是完成后要调用的函数。这就是你需要设置你的花式选择器的地方。

好的,bsmSelect开发者在几分钟内回答了我。太好了

要让bsmSelect了解其select更改,必须在select上触发
change
事件。无需再次调用bsmSelect

所以它可以是这样的:

function loadNewOptions(val) {
  var r = $.ajax({
    type: 'GET',
    url: /*My URL*/,
    success: function(data) {
      $('#my_select_multiple').html(data).trigger('change');
    }
  }).responseText;
  return r;
}

$('#my_select_simple').change(function() {
  loadNewOptions($(this).val());
});

但这不会满足AJAX请求,不是吗?它不起作用:(我认为这是执行AJAX请求的另一种方式。但是函数调用没有任何效果,无论是在这里还是在我函数的success参数中。谢谢你。是的,load只是在后台使用AJAX。但是它让我很困扰,你说它什么都没有做。你能发布你尝试过的代码吗?嘿@Patricia。AJAX请求确实有效,它可以发回expectet响应…但函数调用不起作用。我用代码更新了答案。谢谢。我尝试了,但没有起作用。即使在Ajax调用中设置html也没有起作用…:(无论如何,谢谢你。请将你当前的HTML添加到你的问题中,以及从ajax请求中返回的内容。嘿@Patricia,ajax响应正常,这是预期的结果。问题是函数
bsmSelect()
不再被调用。谢谢。好的,所有这一切都是bsmSelect插件的问题…我尝试了另一个插件,效果很好。因此我将更新我的问题,即使我认为很难获得此类特定问题的答案。我也将在bsmSelect tracker中打开一个票证。您的插件是否具有删除或销毁功能?您可以尝试删除支持下拉列表并添加一个新列表,然后将插件应用于该列表,而不只是更新内容并重新应用插件。