2011-08-09 66 views
0

我正在動態生成html選擇框。選擇框具有總數選擇框的名稱:值對。這就是說,如果我有4個選擇框,那麼在每個選擇框中應該有如下選項:當id未知時,在動態生成的選擇框中選擇選項

<select id="dynamic_id" > 
     <option value=1>1</option> 
     <option value=2>2</option> 
     <option value=3>3</option> 
     <option value=4>4</option> 
    </select> 

。我已經完成了。現在我想爲第一個選擇框選擇選項1,爲第二個選擇框選擇選項2等等。 (我是一個完整的小白和maintainig別人的代碼。因此,代碼是非常醜陋的,但如果你們需要它。我將它張貼。)

編輯 目前,阿卜杜拉的建議工作有點但不完全。它始終只選擇第一個項目。夥計們,這是一個可怕的代碼,但我認爲只有它可以幫助你理解我正在犯的錯誤:

var r_count=0; 
$(document).ready(function(){ 
var newId; var tableName; var display_table; 

$(".clickable").each(function(i,l){ 

$(l).click(function(){ 
    var parentId = $(this).parents("div")[0].id; 
    var li = $(this).parents("li")[0]; 
    var liIndex = $(li).parent().find("li").index(li); 
    newId = parentId + "_" + liIndex; 

    if(this.checked) { 
     display_table = $("#display_board"); 
     var newtr = $(".data_table_template").clone(); 
     tableName = $($(this).parents("table")[0]).find("th").text().trim(); 
     var columnName = $(this).parent().text().trim(); 

     newtr.attr("id",newId); 
     newtr.attr("class",""); 
     newtr.show(); 
     newtr.find("td").each(function(i,l){ 

     if(i==0) 
      $(this).html(columnName) 
     else if(i==2) 
      $(this).html(tableName) 
     else if(i==3){ 
      $(this).each(function(i,l){ 
       $(this).find("#checkbox").attr("id", "chkbx_" + newId); 
      }); 
     } 
     else if(i==4){ 
      $(this).each(function(i,l){ 
        //$(this).find("#select").html(); 
        /* Generate new id for the table item dynamically*/ 
        $(this).find("#select").attr("id", "sort_type_" + newId); 
        $(this).find(".sel1").attr("name", "sort_type_" + newId); 
        $(this).find("#checkbox").attr("id", "sort_type_" + newId); 
      }); 
     } 
     else if(i==5) 
      $(this).each(function(m,l){ 
       /* Generate new id for the table item dynamically*/ 
       $(this).find("#select2").attr("id", "sort_order_" + newId); 
       $(this).find(".sel2").attr("name", "sort_order_" + newId); 
      }); 
     }); 

     display_table.append(newtr); 
     r_count++; 

     // addOption is from another jquery plugin    
     $(".sel2").addOption(r_count+1, r_count+1); 

     // as suggested in the answer 
     $('select').each(function (index, item) { 
     $(this).children('option:nth-child(' + (index +1) + ')').attr('selected',  'selected'); 
}); 

} else { 
          r_count--; 
          //$("#" + newId).find("#chkbx_"+newId).attr('checked',''); 
          $("#" + newId).remove(); 
          $(".sel2").addOption(r_count, r_count); 
         } 


        } 

       ); 
       }); 

只有第5列中的選擇框在考慮範圍內。

+0

怎麼樣@的Jakub的代碼?如果事實並非如此,你怎麼能說一些事情在起作用? abdulla的解決方案假定選擇框是兄弟姐妹。 –

+0

與Jakub的代碼,項目正在正確顯示,但沒有選擇所需的項目。這可能是因爲我在選擇列表中有一個額外的「Unsorted」選項。 – jQuryNoob

+0

它是第一個選擇嗎?然後,只需添加一個'索引'。 –

回答

2
$('select').each(function(index, value) { 
    this.selectedIndex = index; 
}); 
+0

+1這是最好的答案不會對數值做任何假設,也不會不必要地使用jQuery –

1

你可以生成你想要有屬性的選項選擇框:

selected="true" 
1

這也適用,通過設置對孩子的選擇=「選擇」屬性..

$('select').each(function (index, item) { 
    $(this).children('option:nth-child(' + (index +1) + ')').attr('selected', 'selected'); 
}); 
1

如果我理解正確的話,我想你有以下標記

<select id="dynamic_id" > 
     <option value=1>1</option> 
     <option value=2>2</option> 
     <option value=3>3</option> 
     <option value=4>4</option> 
</select><br/> 
<select id="dynamic_id2" > 
     <option value=1>1</option> 
     <option value=2>2</option> 
     <option value=3>3</option> 
     <option value=4>4</option> 
</select><br/> 
<select id="dynamic_id3" > 
     <option value=1>1</option> 
     <option value=2>2</option> 
     <option value=3>3</option> 
     <option value=4>4</option> 
</select><br/> 
<select id="dynamic_id4" > 
     <option value=1>1</option> 
     <option value=2>2</option> 
     <option value=3>3</option> 
     <option value=4>4</option> 
    </select> 

你可以嘗試

$("select").each(function(index){ 
    index=index+1; 

$(this).find("option[value='"+index+"']").attr("selected","selected"); 

}); 

這裏是小提琴http://jsfiddle.net/skyWJ/

1
$('select').each(function(index, value) { 
    $(this).val(index + 1).change(); 
}); 
+0

看起來不起作用:http://jsfiddle.net/NHyXw/只有當數值實際上是數字和連續的時候,這纔會起作用 –

+0

@Felix Kling但它適用於我。請你澄清我 – thecodeparadox

+0

在我連接的小提琴中,選定的值是'1,2,4,1'。我使用Chrome 13. –

相關問題