2016-05-10 30 views
0

ЭТОТ ВОПРОС РЕШЕН В СВОБОДЕ КОММЕНТАРИИ. РАБОТАЮЩЕЕ РЕШЕНИЕ ВЫПОЛНЕНО НИЖЕjQuery/Javascript foreach If/Else | Если пусто (ничего не делать) else (show foreach)

Итак, я получил этот кусок кода, который я пытаюсь адаптировать, поскольку он не показывает, как я хочу.

function writeRow(row) { 
    var spans = ''; 
    for (var i = 0; i < num_of_fields; ++i) { 
     // to do: append for select type field -> if select write: name, value, title 
     // to do: add class "debug" to name, and for select tag value 
     spans += '<div><span class="name"><b>' + field[i].name + ':</b></span> <span class="value">' + row[field[i].name] + '</span></div> '; 
    } 
    spans += ' <a href="#remove-row" class="remove">&#215;</a>'; 
    $('#outer-list').append($('<li id="row_' + row_id++ +'">').append(spans)); 
} 

Проблема с этой линией:

spans += '<div><span class="name"><b>' + field[i].name + ':</b></span> <span class="value">' + row[field[i].name] + '</span></div> '; 

Проблема заключается в том, что, когда row[field[i].name] внутри .value <span> пустой, он все еще показывает имя и поле пустого значения. Итак, я подумал о замене этой строки на if if else, если .value <span> пуст, а затем //do nothing еще CODE FROM ABOVE.

Поскольку я не собираюсь задавать вопрос, не пытаясь его исправить, сначала сделаем попытку, которую я сделал до сих пор, поэтому имейте в виду, что я разместил все это, если бы остался на том же месте, что и одна строка код выше!

Покушение 1

if $(row[field[i].name]).length == 0) { 
    // Do nothing 
} else { 
    spans += '<div><span class="name"><b>' + field[i].name + ':</b></span> <span class="value">' + row[field[i].name] + '</span></div> '; 
} 

Покушение 2

if $(row[field[i].name]).val().trim().length == 0) { 
    // Do nothing 
} else { 
    spans += '<div><span class="name"><b>' + field[i].name + ':</b></span> <span class="value">' + row[field[i].name] + '</span></div> '; 
} 

Попытки не в правильном порядке, но те 2, где оставил в документе, как комментарии, которые я попробовал несколько других вещи, в том числе :empty, но я уже удалил их из раздела комментариев.

Заранее благодарим за любую помощь. И если что-то неясно, пожалуйста, дайте мне знать.

Покушение 3 с помощью от Mike C

var row_id = 0; // row counter 
function writeRow(row) { 
    var spans = ''; 
    for (var i = 0; i < num_of_fields; ++i) { 
     // to do: append for select type field -> if select write: name, value, title 
     // to do: add class "debug" to name, and for select tag value 
     if row[field[i].name].length == 0) { 
      // Do nothing 
     } else { 
      spans += '<div><span class="name"><b>' + field[i].name + ':</b></span> <span class="value">' + row[field[i].name] + '</span></div> '; 
     } 
    } 
    spans += ' <a href="#remove-row" class="remove">&#215;</a>'; 
    $('#outer-list').append($('<li id="row_' + row_id++ +'">').append(spans)); 
} 
+1

Почему вы окружив его функции JQuery? jQuery попытается извлечь элементы в DOM, соответствующие вашему запросу. Просто проверьте 'row [field [i] .name]' непосредственно ... –

+0

@MikeC Привет, спасибо за помощь, я не знаю, что вы имеете в виду с 'direct'? Он находится внутри файла .js из модуля Joomla, поэтому он завернут. – purple11111

+1

Это означает, что это похоже. JS не требует от вас что-либо делать с jQuery. Не делайте '$ (строка [field [i] .name])'. Просто используйте 'row [field [i] .name]'. –

ответ

0

я отвечаю на это сам, как я не хочу иметь слишком много вопросов без каких-либо ответов, как это может получить меня заблокирован! Не может этого. Too быть ясным это ответы кредиты должны пойти к MikeC. Но он никогда не отправлял ответ в качестве ответа, а как комментарий. Я попросил его вместе с некоторыми другими, чтобы отправить ответ, чтобы мы могли его принять. Он никогда этого не делал, поэтому сам отправляю свой ответ.

Рабочий раствор Майком C

var row_id = 0; // row counter 
function writeRow(row) { 
var spans = ''; 
for (var i = 0; i < num_of_fields; ++i) { 
    // to do: append for select type field -> if select write: name, value, title 
    // to do: add class "debug" to name, and for select tag value 
    if (row[field[i].name].length == 0) { 
     // Do nothing 
    } else { 
     spans += '<div><span class="name"><b>' + field[i].name + ':</b></span> <span class="value">' + row[field[i].name] + '</span></div> '; 
    } 
} 
spans += ' <a href="#remove-row" class="remove">&#215;</a>'; 
$('#outer-list').append($('<li id="row_' + row_id++ +'">').append(spans)); 
} 
Смежные вопросы