jQuery

2012-03-25 24 views
6

Kullanarak birden çok girişten değer dizisi alın Birisi birkaç giriş alanından nasıl değer alacağımı lütfen bana iletebilir mi? (Formda gönderdiğiniz) JavaScript in bir çözümjQuery

<li> 
<label>Additional Title: </label><input type='text' name='additionaltitlename' ... /> 
</li> 
<li> 
<label>Additional Title: </label><input type='text' name='additionaltitlename' ... /> 
</li> 

:

Böyle birkaç girişli bir liste var

ben JQuery içinde aynı şeyi yapmak nasıl
... 
var extratitles = document.getElementsByName('additionaltitlename'); 
var str = ''; 
     for (var i = 0; i < extratitles.length; i++) { 
     str = str + '|' + extratitles.item(i).value; 
    } 
} 

?

cevap

16

Aynı ada sahip iki girdiye sahip olmak geçerli değildir. Bunu yapmak isterseniz, <input name="titles[]">

kullanabilirsiniz Bu deneyebilirsiniz:

<input name="titles[]"> 
<input name="titles[]"> 
​<button>submit</button>​​​​​​​​​​​​​​​​​​​​​​​ 

bu jQuery ile

// click handler 
function onClick(event) { 
    var titles = $('input[name^=titles]').map(function(idx, elem) { 
    return $(elem).val(); 
    }).get(); 

    console.log(titles); 
    event.preventDefault(); 
} 

// attach button click listener on dom ready 
$(function() { 
    $('button').click(onClick); 
}); 

See it working here on jsFiddle

DÜZENLEME

Bu cevap verir usin bir dizi yerine bir dizinin başlıkları g | ayırıcı. Şahsen, bunun çok daha kullanışlı olduğunu düşünüyorum.Diğer yanıt açıklandığı gibi o ek yapmak isterse

sadece formu yayınlıyorsan ve birden değerleri desteklemek istiyoruz

+0

Neden this.value' kullanılmıyor? Her basit işlem için _jQuery_ kullanmak gerçekten gerekli mi? –

+0

@IulianOnofrei, [gerekliyse bana söyleyin] (https://github.com/jquery/jquery/blob/master/src/attributes/val.js#L10-L69). Bir lib gibi jQuery kullanmanın amacı, a) köşe durumlarının çoğunluğu için endişeyi azaltmaktır ve b) tutarlı, sezgisel bir api sağlamaktır. Evet, INPUT öğeleri için 'this.value' güvenilir bir şekilde kullanabilirsiniz, ancak SELECT gibi şeyler için bu değişiklikler. Her iki durumda da jQuery, herhangi bir senaryoda çalışmanız için size bir sezgisel '.val 'yöntemi vermez ve verir. –

+0

@IulianOnofrei, ayrıca jQuery kullanan ve jQuery deyimleri * kullanılarak yazılmış bir cevap verdim çünkü * bu soru 'jquery' ile etiketlendi. Bu bir vanilya javascript sorusu olsaydı, tamamen farklı bir şekilde yanıtlardım. –

2

Kullanım jQuery'nin yerli serialize fonksiyonu:

var data = $('input[name="additionaltitlename"]').serialize(); 

docs

.serialize() yöntemi standart URL olarak kodlanmış gösterimde bir metin dizesi oluşturur. Bir dizi form öğelerini temsil eden bir jQuery nesnesi üzerinde çalışır.

+0

Bu gerçekten uygulanabilir şeklinde başlıklar koymuyor .serialize yöntemi kullanmak javascript ile işleme –

+0

@macek. o ajax isteği ile değerlere sunmak istediğini yazdı. serialize() 'yerel çözümdür. – gdoron

0

maddeler:

str = ''; 
$("input[type='text']").each(function() { 
str = str + '|' + $(this).val(); 
}); 

veya

str = ''; 
$("input[name='additionaltitlename']").each(function() { 
str = str + '|' + $(this).val(); 
}); 

?

0

Muhtemelen gidilecek yol olan @ gdoron'un veya @ macek'in cevabına ek olarak, gönderdiğiniz tüm kodun yanlış olduğunu da eklemek istiyorum, bir tane daha } çok fazla. (Hala iyileştirme için bir oda vardır rağmen) Bu çalışır:

$('#getpreviewbutton').click(function(){ 

    var extratitles = document.getElementsByName('additionaltitlename'); 
    var str = ''; 
      for (var i = 0; i < extratitles.length; i++) { 
      str = str + '|' + extratitles.item(i).value; 
      } 

});​ 

Bkz: http://jsfiddle.net/8XJcc/

Ben kullanmakta fakat oldukça kullanışlı olabilir Firebug veya Chrome Dev Tools gibi sth hangi tarayıcıyı kullandığınızı bilmiyorum Bunun gibi basit hataları tespit etmek. Firefox için bkz. this reference veya Chrome için this one. IE bile bir tane var - sadece F12'ye basın.