2012-03-15 4 views
6

У меня есть массив HTML;получить элементы массива html с jquery

<input class="input_box" name="authors[]" id="author1"/> 

то, что я хочу сделать, это, получить значение этого массива в дисплей без обновления страницы, (я отображать значение только рядом с полем ввода, в независимом div)

$(document).ready(function(){  
$("input[id^="author"]").change(update); 
}); 
    function update(){ 
    var authors=new Array(); 
    $("input[id^="author"]").each(function(){authors.push($(this).text()) }); 
    var author= '"' + authors.join('", "') + '"'; 

    $('#val-authors').html('authors:<span class="red"> "'+author+'"</span>');} 

только вещь я вижу в <div id="val-authors"> is, "",

что мне не хватает?

заранее спасибо ..

ответ

7

Ваш селектор:

$("input[id^="author"]") 

неверен, потому что вы пытаетесь использовать двойные кавычки внутри двойные кавычки. Одна из пар должна быть одинарной.

Если вы использовали отладчик JS, это должно быть немедленно видно.

FWIW, это экологически чистых способов получения требуемого массива:

var authors = $('input[id^="author"]').map(function() { 
    return this.value; 
}).get(); 
1

Изменение:

$("input[id^="author"]").change(update); 

To:

$("input[id^='author']").change(update); 
3

Ваш "HTML массив" не является массив, даже если предположить, что существует ряд других подобных входов (хотя, когда форма отправляется на выбранный вами серверный язык li kely позволяет вам получить доступ к значениям входов с тем же именем, что и массив). Так или иначе ...

Основная проблема заключается в том, что ваш JS имеет синтаксическую ошибку:

$("input[id^="author"]") 

Если вы хотите включить двойные кавычки внутри двойных кавычек буквальных вы должны сделать их избежать:

$("input[id^=\"author\"]") 

Или процитировать строку с синглами:

$('input[id^="author"]') 

Это может быть более эффективным, чтобы избежать атрибут начинается с селектора с атрибутом id и выбирается атрибутом name, отмечая, что для jQuery квадратные скобки в имени atttribute должны быть экранированы с обратными косыми чертами, а для строковых литералов JS также необходимо избегать обратных косых черт:

Кроме того, чтобы получить значение входа с JQuery использовать .val(), а не .text(), но это более эффективно использовать только this.value:

var authors = []; 
$('input[id^="author"]').each(function(){ authors.push(this.value); }); 

Я также рекомендую объявляющие массивы с = [], а не = new Array().

+0

спасибо @nnnnnn, я не упоминал здесь, но у меня есть другой javascript, который добавляется в авторов [], поэтому у меня есть несколько авторов на самом деле. Я попробовал ваши советы и заменил .text() на .val() и baam! спасибо .. – teutara

+0

Cool. Рад был помочь. (Я понял, что у вас несколько элементов 'authors []', но моя точка в массиве состоит в том, что в html нет массивов.) – nnnnnn

Смежные вопросы