繁体   English   中英

Ajax与bootstrap.TbSelect2(Yii)

[英]Ajax with bootstrap.TbSelect2 (Yii)

我有一个Select,当另一个Select更改时,其内容也会更改。 更改时,ajax在我的控制器中运行一个函数来执行以下操作:

$this->renderPartial("_townsselect", array('country'=>$country));

它从$ _GET获取$ country。

_townselect.php

$towns= $this->townsselect($country);
$this->widget('bootstrap.widgets.TbSelect2', array(
    'name'=>'clienttown',
    'asDropDownList' => true,
    'data'  => $towns
)); 

townsselect()创建一个结构如下的数组:$ towns [ town-id ] =' TownName '

正常加载页面后,它还将运行先前手动设置为$ country的默认renderPartial。

因此,它两次都调用相同的代码。 但是,在页面加载时,Tbselect2可以正确显示(正确的样式,包括对js的支持,从而为其提供了搜索框,等等),但是当我使用Ajax时,标准的Select会使用有限的样式。 实际上,产生的代码是不同的:

页面加载后的结果

<div class="select2-container" id="s2id_clienttown" style="width: 220px">
    <a href="#" onclick="return false;" class="select2-choice" tabindex="-1">  
        <span>Accrington</span>
        <abbr class="select2-search-choice-close" style="display:none;"></abbr>
        <div>
            <b></b>
        </div>
    </a>
    <div class="select2-drop select2-with-searchbox select2-drop-active select2-offscreen" style="display: block;">
        <div class="select2-search">
            <input type="text" autocomplete="off" class="select2-input" tabindex="-1">
        </div>
        <ul class="select2-results"></ul>
    </div>    
</div>
  <select name="clienttown" id="clienttown" style="display: none;">
      <option value="Select">Select</option>
  ...
  </select>
</div>

在ajax之后仅生成Select。

临时解决方案

我设法以某种形式使它工作。 我没有重新创建整个选择框,而是更改了JQuery代码以清除“选择”中的所有选项,并用新列表重新填充它。 新列表来自ajax返回的JSON字符串。 处理如下:

var towns = $.parseJSON(resp);
$('#clienttown option:gt(0)').remove(); //remove all options, but leave default 'Select A Town' option
var sel = $('#clienttown');
$.each(towns, function(id, town){
    sel.append($("<option></option>").attr("value", id).text(town));
});

我将其放在此处,以防其他人尝试达成类似的目标。

但是我仍然有兴趣知道为什么在ajax渲染后yiibooster / bootstrap不起作用。 并且,如果有一种方法可以使它起作用,那么除非首先在页面加载时呈现输入,否则此解决方案将不起作用。

我知道这很旧,但是您是否尝试过以下方法来使Ajax渲染工作正常。

// Notice the ,false, true at the end of renderpartial
$this->renderPartial("_townsselect", array('country'=>$country), false, true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM