#javascript
#javascript
Вопрос:
Я пытаюсь динамически создать некоторый HTML-код и назначить функцию onclick
событию ссылки. Вот код, который у меня есть…
link = document.createElement("a");
link.setAttribute("href", "#");
link.onclick = function(){someFunction(myObject.id);};
link.appendChild(document.createTextNode("Click Me!"));
Мои исследования показали, что я оборачиваю свой вызов функции внутри анонимной функции, как я уже делал. Однако я нахожу, что моя функция вызывается при запуске этого фрагмента скрипта, а не при событии click. Кажется, это распространенная проблема, но я следую всем советам, которые я нашел до сих пор, но безрезультатно.
Любая помощь или указания высоко ценятся.
Мистер Б.
Комментарии:
1. Это странно, someFunction() не должна вызываться, пока вы не нажмете на ссылку…
2. Я протестировал это в jsfiddle, оно отлично работает: jsfiddle.net/sGbjD
3. Я тоже пытался… ссылка.addEventListener(«щелчок», функция(){someFunction(object.id );}, false);
4. Хорошо, для начала, я думаю, что это может быть функция, которую я вызываю, как если бы я заменил вызов моей функции на вызов
alert
она работает нормально. Следующая проблема, поскольку объект поступает из массива, и я создаю список ссылок,object.id
всегда один и тот же, значит, где-то что-то пошло не так.5. Я вижу в одном из ваших других сообщений, что вы новичок в Javascript. Чтобы сохранить работоспособность, ознакомьтесь с jQuery. Я обнаружил это примерно через 5 лет моего опыта работы с Javascript и жаловался, что не обнаружил его раньше.
Ответ №1:
Может быть, попробовать этот альтернативный метод:
function someFunction(id) {
return function() {
alert(id);
};
}
link = document.createElement("a");
link.setAttribute("href", "#");
link.onclick = someFunction(myObject.id);
link.appendChild(document.createTextNode("Click Me!"));
Ответ №2:
Опубликованный вами код работает нормально — я только что его протестировал. Вот несколько возможностей, на которые следует обратить внимание..
- Где вы определили someFunction? Вызывается ли она по определению?
- Ссылаетесь ли вы на какую-либо функцию где-либо еще? Возможно, именно это вызывает проблему.
- По какой-либо причине вы не используете библиотеку javascript, такую как jQuery, для этого? Многое упрощает.
Одним из методов отладки было бы изменить эту строку на:
link.onclick = function(){alert('test'); someFunction(myObject.id);};
Появляется ли предупреждение? Я предполагаю, что нет, предлагая # 1 и # 2 выше. Не стесняйтесь размещать больше кода, и мы сможем поискать ошибку в другом месте.
Комментарии:
1. Появляется предупреждение. Я думаю, как я упоминал ранее, проблема в моей вызываемой функции. В данный момент я не использую jQuery, поскольку я новичок в javascript и хочу сначала понять основы gthe.
2. В вашем комментарии к основному сообщению вы заявили, что замена предупреждения работает нормально. Поскольку это фактически то же самое, что я делаю здесь, это стало довольно запутанным 🙂 Не могли бы вы опубликовать весь свой код или, по крайней мере, больший фрагмент?
3. Я думаю, что теперь я разбираюсь с этим, я загрузил множество оповещений, чтобы я знал, что вызывается с какими параметрами. Я думаю, что мое первоначальное предположение о том, что функция вызывалась в этой части скрипта, было неверным, моя функция просто делала что-то неожиданное, из-за чего казалось, что это так. Сейчас у меня другая проблема (которая, вероятно, не помогла !!) что в основном в мою функцию передаются неправильные параметры. Я видел это в другом месте на SO, где функции передается значение последнего элемента в массиве, который выполняется итерация.
4. Я знал это! 🙂 Для облегчения отладки вы также можете изучить Firebug и его возможности ведения журнала в консоли. Намного проще, чем оповещения.
5. Я нахожу, что окно консоли javascript в Chrome тоже довольно хорошее, но я изучу firebug, приветствую. Есть идеи о том, почему моей функции передается последний элемент в моем массиве?