2012-03-21 2 views
0

У меня есть div с ID 'adpictureholder', к которому я динамически добавляю (или удаляю) изображения.
On form submit Я хочу получить значения SRC всех этих изображений внутри этого DIV и поместить их в значение одного скрытого ввода с идентификатором «piclinkslisttosubmit».
Дело в том, что мой текущий Javascript не работает, как если бы там была какая-то синтаксиса, но я не вижу, где.
Может кто-нибудь, пожалуйста, быстро взглянуть на него?Почему мой Javascript недействителен?

function copyonsubmit(){ 
    var strump1 = ''; 
    var i=0; 
    var endi = document.getElementById('adpictureholder').childNodes[].length - 1; 
    var images = document.getElementById('adpictureholder').childNodes[]; 
    for (i=0;i<=endi;i++) 
    { 
     strump1 = strump1 + '|' + images[i].src; 
    } 
    document.getElementById('piclinkslisttosubmit').value = strump1; 
} 

ответ

5

Изменение childNodes[] просто childNodes.

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

1

Прежде всего вам не нужно [] после childNodes. что вызывает ошибку.

Вы также забыли, что childNodes содержит текстовые узлы и не будет работать должным образом, потому что они не все содержат свойство src. Я исправил, что в следующем примере:

function copyonsubmit() { 
    var str = ''; 
    var textbox = document.getElementById('piclinkslisttosubmit'); 
    var i = 0; 
    var images = document.getElementById('adpictureholder').childNodes; 
    var numImages = images.length - 1; 
    var src = ""; 
    for (i = 0; i < numImages; i++) { 
     if (images[i].tagName === "IMG") { 
      str += images[i].src + '|'; 
     } 
    } 
    str = str.slice(0, -1); // cut off the final | 
    textbox.value = str; 
} 

http://jsfiddle.net/NWArL/2/

Во-вторых вы могли бы написать это на самом деле просто с JQuery.

var str = ""; 
$("#apictureholder").children("img").each(function() { 
    str += $(this).attr("src") + "|"; 
}) 
$("#piclinkslisttosubmit").val(str); 

В-третьих, не забудьте проверить свою консоль на наличие ошибок. Было очень ясно, когда я запускал этот код на JSFiddle, что у него была проблема.

И, наконец, что именно вы пытаетесь сделать?

0

Изменение childNodes[] для childNodes и отдыха выглядит хорошо для меня,

Read about childNodes

Try,

function copyonsubmit(){ 
    var strump1 = ''; 
    var i=0; 
    var endi = document.getElementById('adpictureholder').childNodes.length - 1; 
    var images = document.getElementById('adpictureholder').childNodes; 
    for (i=0;i<=endi;i++) 
    { 
     strump1 = strump1 + '|' + images[i].src; 
    } 
    document.getElementById('piclinkslisttosubmit').value = strump1; 
} 
1

Вы не должны использовать [] при чтении значения свойства:

var images = document.getElementById('adpictureholder').childNodes; 

Вы п, то получим длину из массива, вместо повторного чтения свойства:

var endi = images.length - 1; 
+0

Только опечатка по длине => 'var endi = images.length - 1;' –

1

Ваш браузер не действует, потому что вы держать положить childNodes[] вы можете решить, что путем замены childNodes[] с просто childNodes

function copyonsubmit(){ 
    var strump1 = ''; 
    var i=0; 
    var endi = document.getElementById('adpictureholder').childNodes.length - 1; 
    var images = document.getElementById('adpictureholder').childNodes; 
    for (i=0;i<=endi;i++) 
    { 
     strump1 = strump1 + '|' + images[i].src; 
    } 
    document.getElementById('piclinkslisttosubmit').value = strump1; 
} ​ 
0

Вы сказали, что используете jQuery, но вы представили нам ванильный Javascript. Я взял на себя смелость конвертировать ваш код в jQuery и немного его очистить. Тем не менее, другие уже определили вашу проблему.

function copyonsubmit() { 
    var strump1 = ''; 
    var images = $("#adpictureholder")[0].childNodes; 
    for (var i = 0; i < images.length; i++) { 
     strump1 += '|' + images[i].src; 
    } 
    $('#piclinkslisttosubmit').val(strump1); 
}​ 
Смежные вопросы