jQuery

2010-08-10 45 views
43

Kullanarak açılır açılır seç tuşu ile jQuery'yi kullanarak bir açılır menü seçerek yerleştirmeye çalışıyorum.jQuery

İşte benim kodudur:

 // Add the list of numbers to the drop down here 
     var numbers[] = { 1, 2, 3, 4, 5}; 
     $.each(numbers, function(val, text) { 
      $('#items').append(
       $('<option></option>').val(val).html(text) 
      );    
     // END 

Ama bir hata alıyorum. Her işlev, bu web sitesinden aldığım bir şey.

Tek boyutlu bir dizi kullandığım için bombalanıyor mu? Hem seçenek hem de metnin aynı olmasını istiyorum. döngüler için

+0

ekleme ürün tek gibi

DOM üzerinde bir seferde Eklentinizde işlevleri ekleyebilirsiniz çok yavaş olarak kabul ve son derece _not advised_ mesafesindedir. Daha fazla performans gösteren bir dize oluşturmak ve –

cevap

78

Dene:

var numbers = [1, 2, 3, 4, 5]; 

for (var i=0;i<numbers.length;i++){ 
    $('<option/>').val(numbers[i]).html(numbers[i]).appendTo('#items'); 
} 

çok daha iyi bir yaklaşım:

var numbers = [1, 2, 3, 4, 5]; 
var option = ''; 
for (var i=0;i<numbers.length;i++){ 
    option += '<option value="'+ numbers[i] + '">' + numbers[i] + '</option>'; 
} 
$('#items').append(option); 
+0

döngüsünden sonra benim için işe yaramaz mı? – Syno

+0

Karşılaştığınız dizi, güvenli bir kaynaktan değil veya sayı değilse, .html (number [i]) 'yerine' .text (number [i]) 'kullanmak dışında listelenen 1. tekniği kullanmalısınız. Bu, herhangi bir enjeksiyon istismarını riske etmeyeceğinizi garanti edecektir. – webwake

36

dizi bildirimi yanlış sözdizimine sahiptir. Bunun yerine, aşağıdaki deneyin:

var numbers = [ 1, 2, 3, 4, 5] 

döngü kısmı sağ

$.each(numbers, function(val, text) { 
      $('#items').append($('<option></option>').val(val).html(text)) 
      }); // there was also a) missing here 

@Reigel yaptığı gibi (böyle küçük diziler üzerinde farkedilebilir değildir)

+0

Önceden tanımlanmış tuşlara sahipseniz, bu en iyi seçenektir – RSM

5

biraz daha performans eklemek görünüyor görünüyor Ayrıca yapabilirsiniz:

var list = $('#items')[0]; // HTMLSelectElement 
$.each(numbers, function(index, text) { 
    list.options[list.options.length] = new Option(index, text); 
}); 
0
function validateForm(){ 
    var success = true; 
    resetErrorMessages(); 
    var myArray = []; 
    $(".linkedServiceDonationPurpose").each(function(){ 
     myArray.push($(this).val()) 
    }); 

    $(".linkedServiceDonationPurpose").each(function(){ 
    for (var i = 0; i < myArray.length; i = i + 1) { 
     for (var j = i+1; j < myArray.length; j = j + 1) 
      if(myArray[i] == myArray[j] && $(this).val() == myArray[j]){ 
       $(this).next("div").html('Duplicate item selected'); 
       success=false; 
      } 
     } 
    }); 
    if (success) { 
     return true; 
    } else { 
     return false; 
    } 
    function resetErrorMessages() { 
     $(".error").each(function(){ 
      $(this).html(''); 
     });`` 
    } 
} 
0

Kullandığım çözüm, jquery:

kullanan bir javascript işlevi oluşturmaktı. Bu, HTML sayfasındaki açılır bir nesneyi dolduracaktır. Lütfen bunun optimize edilebileceği yeri belirtin - ancak olduğu gibi iyi çalışıyor.

function util_PopulateDropDownListAndSelect(sourceListObject, sourceListTextFieldName, targetDropDownName, valueToSelect) 
{ 
    var options = ''; 

    // Create the list of HTML Options 
    for (i = 0; i < sourceListObject.List.length; i++) 
    { 
     options += "<option value='" + sourceListObject.List[i][sourceListTextFieldName] + "'>" + sourceListObject.List[i][sourceListTextFieldName] + "</option>\r\n"; 
    } 

    // Assign the options to the HTML Select container 
    $('select#' + targetDropDownName)[0].innerHTML = options; 

    // Set the option to be Selected 
    $('#' + targetDropDownName).val(valueToSelect); 

    // Refresh the HTML Select so it displays the Selected option 
    $('#' + targetDropDownName).selectmenu('refresh') 
} 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
2
var qty = 5; 
var option = ''; 
for (var i=1;i <= qty;i++){ 
    option += '<option value="'+ i + '">' + i + '</option>'; 
} 
$('#items').append(option); 
2

bir çözüm json da harita kendi jquery eklentisi oluşturmak ve onunla seçin doldurmak etmektir.

(function($) {  
    $.fn.fillValues = function(options) { 
     var settings = $.extend({ 
      datas : null, 
      complete : null, 
     }, options); 

     this.each(function(){ 
      var datas = settings.datas; 
      if(datas !=null) { 
       $(this).empty(); 
       for(var key in datas){ 
        $(this).append('<option value="'+key+'"+>'+datas[key]+'</option>'); 
       } 
      } 
      if($.isFunction(settings.complete)){ 
       settings.complete.call(this); 
      } 
     }); 

    } 

}(jQuery)); 

Bunu yaparak diyebilirsiniz:

$("#select").fillValues({datas:your_map,}); 

avantajları olduğu her yerde aynı sorunla karşı karşıya olacağını sadece

$("....").fillValues({datas:your_map,}); 

Et voila çağrı! Eğer