2016-02-03 39 views
0

我有一個jQuery函數根據select1的處理方式處理select2。爲什麼<select>在幾個div內時下面的腳本不起作用?我無法使用jquery獲取幾個div內的精選html的值

HTML:

<div id="old_div"> 
    <div class="form-group col-md-4"> 
     <label class="col-sm-3 control-label">Cargo</label> 
     <div class="col-sm-7"> 
      <select class="form-control" name="select1" id="select1"> 
       <?php foreach($cargos as $row) { 
        echo '<option value="'.$row->id_cargo.'" >'.$row->nome_cargo.''.$row->id_cargo.'</option>';  
       } ?> 
      </select> 
     </div> 
    </div> 
    <div class="form-group col-md-6"> 
     <label class="col-sm-2 control-label">Nível Cargo</label> 
     <div class="col-sm-3"> 
      <select class="form-control" name="select2" id="select2"> 
       <?php foreach($nivel as $linha2) { 
        echo '<option value="'.$linha2->id_cargo.'" >'.$linha2->num_nivel.'</option>'; 
       } ?> 
      </select> 
     </div> 
    </div> 
</div> 
<div id="new_div"> 
</div> 

的jQuery:

$(document).on('change',"#select1", function() { 
    var id = $(this).val().trim(); 
    $(this).next('#select2').find('option').hide(); 
    var $options = $(this).next('#select2').find('option[value=' + id + ']'); 
    $options.show(); 
    $options.first().attr('selected',true); 
}); 

回答

0

因爲它不是未來。 next用於選擇同級元素。

$(this).next('#select2')替換爲$('#select2')

順便說一句,如果你知道元素的id,你實際上並不需要任何其他的上下文。由於ID文件中的必須是唯一的

0

.next()只搜索兄弟元素,因此,如果#select2不具有相同的父爲#select1然後next()不會達到它。

幸運的是,沒有理由使用.next - $('#select2')會自行找到節點。

1

根據jQuery

如果提供的jQuery代表了一組DOM元件,所述 的.next()方法允許我們通過在DOM樹中的緊接 兄弟這些元素的搜索和從匹配元素

所以,當你嘗試下一個方法,它會嘗試與ID select2同一水平上尋找一個元素構建一個新的jQuery 對象。由於ID是唯一的,您不需要將其作爲兄弟。你可以在文檔中找到它:

$("#select2").find('option').hide(); 
+0

我明白,但它仍然不夠,完全看到我的問題:[demo](http://jsfiddle.net/6YEQx/38/)。當替換$(this).next('。select2')。find('option')。hide();與$('#select2')。find('option')。hide();有效!但它是不夠的,它只能在第一個選擇,刪除所有的divs,適用於所有選擇 –

+0

我希望你已經理解了我,我有點困惑。 –

+0

我不確定你期待的行爲是什麼 –