2015-05-20 3 views
0

Я пытаюсь передать аргументы функции динамически. Я нашел много вопросов по теме на эту тему, но где-то я не получаю.Передача аргументов функции во время выполнения

Моя проблема очень похожа на сценарий. Я использую квадратные скобки для имени функции и аргументов, но я не уверен, где я ошибаюсь.

Будет здорово, если кто-то может указать мне хорошую документацию по этому вопросу.

function myage(age) { 
    alert("My age is " + age + "!!"); 
} 

model = [{ 
    name : "Tom", 
    age : 30, 
    link : myage 
}, 
{ 
    name : "James", 
    age : 32, 
    link : myage 
}]; 

var elem; 
for(var i = 0; i < model.length ; i++) { 
    elem = '<li><a href="#" onclick=[' + model[i].link + '][' + model[i].age + ']>' + model[i].name + '</a></li>'; 
} 

Это ошибка, она не работает.

+0

Почему вы используете квадратные скобки 'onclick'? Квадратные скобки должны быть помещены после выражения, которое возвращает массив или объект, чтобы индексировать его. – Barmar

ответ

2

Поскольку вы строите строку в атрибуте onclick, свойство link должно быть именем функции, а не самой функцией. Затем вы должны поместить аргумент в круглые скобки после него, а не квадратные скобки.

function myage(age) { 
 
    alert("My age is " + age + "!!"); 
 
} 
 

 
model = [{ 
 
    name: "Tom", 
 
    age: "thirty", 
 
    link: "myage" 
 
}, { 
 
    name: "James", 
 
    age: 32, 
 
    link: "myage" 
 
}]; 
 

 
var elem; 
 
for (var i = 0; i < model.length; i++) { 
 
    elem = '<li><a href="#" onclick="' + model[i].link + '(\'' + model[i].age + '\')">' + model[i].name + '</a></li>'; 
 
    document.getElementById("container").innerHTML += elem; 
 
}
<ul id="container"></div>

Однако, если вы хотите, чтобы посмотреть ссылку, когда пользователь щелкает, вы можете сделать это. Вам нужно поставить литерал model[i] в атрибут onclick, а не в функцию.

function myage(age) { 
 
    alert("My age is " + age + "!!"); 
 
} 
 

 
model = [{ 
 
    name : "Tom", 
 
    age : 30, 
 
    link : myage 
 
}, 
 
{ 
 
    name : "James", 
 
    age : "thirty-two", 
 
    link : myage 
 
}]; 
 

 
var elem; 
 
for(var i = 0; i < model.length ; i++) { 
 
    elem = '<li><a href="#" onclick="model[' + i + '].link(\'' + model[i].age + '\')">' + model[i].name + '</a></li>'; 
 
    document.getElementById("container").innerHTML += elem; 
 
}
<ul id="container"></div>

+0

Если вместо цифр как 30 и 32 я пишу их как строки «Тридцать» и «Тридцать два», должен ли приведенный выше код оставаться неизменным? – Ejaz

+0

В вашем коде, который выполняет математику в возрасте, нет ничего, поэтому не имеет значения, являются ли они строками или цифрами. – Barmar

+0

Если я использую цифры как 30 и 32, приведенный выше код работает нормально, но со строками код начинает искать его значение (возможно, рассматривая его как переменную). В чем может быть проблема? – Ejaz

2

похоже, что у вас есть указатель в неправильном месте. Поскольку «модель» - это массив, вы должны быть индексирующей моделью. Например: model[i].link

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