2015-12-26 100 views
3

這是選擇:選擇不插入Ajax調用(引導Selectpicker)後,用HTML()選項後,工作

<select class="selectpicker" id="item-fornecedores-1" multiple data-placeholder="Selecione os fornecedores para este item"></select> 

這是數據,我插入:

<optgroup label="São José do Rio Preto"><option>TORQUEMIX </option></optgroup><optgroup label="Sorocaba"><option>A.M.DIB INDUSTRIA E COMERCIO</option></optgroup><optgroup label="Salto de Pirapora"><option>CONTA DE TESTE DE ÓRGãO PúBLICO</option></optgroup> 

哪個由產生:

$response = ""; 
    foreach ($filtro as $key => $value) { 
     $nomeCidade = getResults("SELECT nome FROM tbl_cidades WHERE id = '".$key."'")[0]["nome"]; 
     if (strpos($response, $nomeCidade) === false) { 
      $response .= '<optgroup label="'.$nomeCidade.'">'; 
     } 
     for ($i = 0; $i < count($value); $i++) { 
      $nomeFornecedor = getResults("SELECT nome_fantasia FROM tbl_fornecedors WHERE id = '".$value[$i]."'")[0]["nome_fantasia"]; 
      $response .= '<option>'.$nomeFornecedor.'</option>'; 
     } 
     $response .= '</optgroup>'; 
    } 

這裏的地方選擇被更新成功:

   $.ajax({ 
        url: hostGlobal+"site/estrutura/ajax.php", 
        type: "POST", 
        dataType: "TEXT", 
        data: { 
         action: "filtrarFornecedores", 
         prefeitura_id: <?=$_SESSION["id"]?>, 
         tipo_negocio: 1, 
         segmentos: $("#pedido-segmento").val(), 
         estados: $("#pedido-fornecedor-estado").val(), 
         index: (i+1).toString() 
        }, 
        success:function(result, textStatus, jqXHR) { 
         console.log(JSON.parse(result)[1]); 
         $("#item-fornecedores-" + JSON.parse(result)[0]).html(JSON.parse(result)[1]); 
         $("#item-fornecedores-" + JSON.parse(result)[0]).show(); 
        }, 
        error: function(jqXHR, textStatus, errorThrown) { 
        // console.log(errorThrown); 
        } 
       }); 

select元素被更新,但是這是發生了什麼:

enter image description here

如果我不使用顯示()之後,我看根本沒有數據(而HTML是完全有效,因爲當我直接在HTML文檔上使用它時,這個結果是有效的)。我正在使用bootstrap-select。爲什麼我不能更新/「加載」那些「實時」的選項而不用擰緊整個元素?

編輯:

我剛剛意識到它完美的作品時,我請從選擇標籤上的「多」。不過,我真的需要使用多個。

回答

1

您必須在修改數據以使其工作後調用refresh方法。

以編程方式更新一個選擇使用JavaScript,第一操縱 選擇,然後使用刷新方法來更新UI匹配 新的狀態。在刪除或添加選項時或在通過JavaScript禁用/啓用選擇時,這是必需的。

$("#item-fornecedores-" + JSON.parse(result)[0]).selectpicker('refresh'); 

當你調用show(),你迫使底層的選擇元素是可見的。該選擇實際上由小部件生成的元素替換。