2012-07-26 72 views
0

最近這個問題一直讓我發瘋。在.each()我循環選擇元素,並將其轉換爲jQuery UI組合框。這工作正常。當涉及到設置選定的值時,我遇到了問題。在我的同一個.each()我試圖設置選定的值,我在其他地方得到的值。jquery ui combobox設置變量作爲選擇器名稱的選定項目

$("#" + e + " [role='select']").each(function() { 
    $(this).combobox(); 
    var selId = '#ContactCategoryId'; 
    var cellv = '9'; 
    $(selId+" option[value=" + cellv + "]").attr("selected", 'true'); 
}); 

既然上面的代碼完美地工作,將combobox設置爲值9和「Cell Number」的文本值。現在下面的代碼失敗,沒有錯誤,但不會改變選定的值。我需要它以下面的方式工作,並從當前select元素獲取Id:$(this).attr('id')。我嘗試了很多不同的東西,請有人給我看看這裏的燈光。

$("#" + e + " [role='select']").each(function() { 

    $(this).combobox(); 
    var selId = '#'+$(this).attr('id'); 
    var cellv = '9'; 
    $(selId+" option[value=" + cellv + "]").attr("selected", 'true'); 
}); 

我正在使用JQuery 1.7和最新的JQuery UI,Thanx!

詹姆斯


由於我的名聲我是不是能夠所以這裏asnwer我的問題是我的解決方案:

確定這個問題真的找到解決方案後,讓我生氣了。通常,當我遇到jquery插件問題時,我只是看看源代碼並且玩弄它,但是對於這個問題,我沒有嘗試並且花費我。這個解決方案非常簡單,就像答案一樣。

 $("#" + e + " [role='select']").each(function() { 
      if($(this).css('display')=='none') 
      { 
       $(this).combobox("destroy"); 
      } 
      $(this).combobox(); 
     }); 

當我看到我認爲現在來源,它必須從某個地方得到它的價值。所以我手動設置的值:

   $(this).val('9') 

它製作的表格的第一開口而不是第二後來我意識到,摧毀它,如果它存在,然後創建組合框需要我。我敢肯定,你的上師有一個更好的解決方案,但我很高興我得到了這個工作

+0

'$(這)'可能是不是你認爲它是....你可以發佈所有的代碼? – ManseUK 2012-07-26 16:13:04

+0

嗨ManseUK,thanx。是的,我認爲這可能是問題,但如果我可以實際登錄到控制檯,那麼變量selId的確切值就是我選擇的名稱。我已經更新了我的原始問題 – jjay225 2012-07-26 17:06:47

+0

以選擇一個你應該做'$('select')。val('9');'所以在你的情況''(this).val(cellv)''你試過? – ManseUK 2012-07-26 17:09:05

回答

0

它不像想象中那麼簡單,因爲組合框實際上不是select元素...更新組合框更新選擇元素但不是周圍的其他方式...我可以看到這樣做的唯一方式就是摧毀該組合框並重新創建它...這個工程:

$("#divselect").children('select').each(function() { 

    $this = $(this); // cache $(this) 
    var cellv = '0'; // new value 

    // Destroy the combobox 
    $this.combobox("destroy"); 

    // Unselect the currently selected option 
    $("option:selected",$this).removeAttr("selected"); 

    // Select the option you want to select 
    $("option[value='"+cellv+"']",$this).attr("selected", "selected"); 

    // Create the combobox again 
    $this.combobox(); 

}); 

Working example here

還要注意..你做不必這樣做:

$("#showAnyCity").click(function() { 
    checkdiv(); 
}); 

你可以做到這一點

$("#showAnyCity").click(checkDiv); 
+0

Thanx的反饋ManseUK,感謝它。是的,在我更新的答案中,我最終意識到組合框在創建之後永遠不會重新創建,所以我遵循了同樣的摧毀方式。 – jjay225 2012-07-27 14:03:25