2015-03-26 4 views
0

Я хочу выполнить функцию, которая добавляет (jQuery) li к ul. Теперь я хочу, чтобы передать строку в качестве параметра, который выглядит как:Javascript - передать html строку, содержащую переменные в качестве параметра

v.name + " by " + v.artist 

Проблема заключается в том, что v.name и v.artist не существует вне функции, так как функция содержит цикл .each:

function showAllItems (data, displayText) { 
    $("ul.result-list").empty(); 
    $.each(data.results, function (k, v) { 
     var name = eval(displayText); 
     if ($("ul.chosen-list input#" + v.name).length == 0) { 
      $("ul.result-list") 
       .append($("<li>") 
        .append($("<input>", {id: v.name, value: v.name, type: "checkbox"})) 
        .append($("<label>", {html: name, for: v.name, class: "clickable"}))); 
     } 
    }); 
} 

То, что я использую сейчас, является eval (displayText), чтобы преобразовать строку в реальную переменную. Но теперь я не могу передать что-то вроде ранее сказанного (v.name + "на" + v.artist ").

Короче говоря, я хочу напечатать строку, содержащую переменные, которые не существуют до цикла .each.

Я надеюсь, что кто-то может мне помочь!

Спасибо заранее,

Ян Wensink

+0

Почему бы не существовало, и что вы имеете в виду, когда утверждаете, что преобразуете строку в «реальную переменную»? – adeneo

+0

Ну, я хочу напечатать v.name, но v не существует вне каждого цикла, потому что это значение. Поэтому я хочу перейти к функции, которую нужно распечатать v.name, но v.name еще не имеет значения. Вот почему это должна быть строка, которая должна быть преобразована в переменную. – Ian

ответ

1

Используйте функцию обратного вызова для создания значения:

function showAllItems (data, getDisplayText) { 
    $("ul.result-list").empty(); 
    $.each(data.results, function (k, v) { 
    if ($("ul.chosen-list input#" + v.name).length == 0) { 
     var name = getDisplayText(v); 
     $("ul.result-list") 
     .append($("<li>") 
      .append($("<input>", {id: v.name, value: v.name, type: "checkbox"})) 
      .append($("<label>", {html: name, for: v.name, class: "clickable"})) 
     ); 
    } 
    }); 
} 

Использование:

showAllItems(data, function(v){ return v.name + " by " + v.artist; }); 
+0

Необходимо также исправлять функции '.append' ... добавление' input' и 'label' в' ul', а не 'li' – Mottie

+0

Но они должны быть добавлены к li, не так ли? – Ian

+0

@Mottie: они должны быть внутри элемента списка. Вы не можете иметь их в списке за пределами элемента списка. – Guffa

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