Передача аргумента в функцию actionlistener onclick в JavaScript

0

Я искал и искал в google и stackoverflow, и, пожалуйста, перенаправьте меня, если я ошибаюсь, но ничто прямо не адресовало то, что я ищу.

Я составил список из трех элементов, и для каждого из них я хотел бы создать прослушиватель действий (onclick), который вызывает функцию window.open(myURL, '_blank') и переходит к этому URL-адресу.

    function goToURL (at) {
        window.open(myURL[at], '_blank');
    };
    for (var i = 0; i < document.getElementsByTagName("li").length; i++) {

        document.getElementsByTagName("li")[i].onclick = goToURL(i);
    }

Теперь он не только игнорирует onclick, но и сразу открывает все URL. Я проверил документацию, и он вызывает только имя функции no (). Но даже если нет параметров, это не сработает. Поэтому, если я не могу передать параметр, мне не удастся назначить разные URL-адреса. Я понимаю, что для меня может быть еще один метод, но что-то такое же простое, как прохождение параметра, я должен понять это.

http://jsfiddle.net/gymbry/7MG7P/

Заранее спасибо!

Теги:
onclick
click
parameter-passing

1 ответ

1
Лучший ответ

Вы должны назначить функцию onclick. Вы вызываете функцию немедленно и присваиваете ей возвращаемое значение. Если вам не нужно было передавать аргумент функции, вы можете просто сделать:

document.getElementsByTagName("li")[i].onclick = goToURL;

Обратите внимание, что после имени функции нет (). Мы не вызываем функцию, мы имеем в виду только функцию.

Если вы хотите передать аргумент, зависящий от переменных цикла, вы должны знать о проблеме "замыкания в цикле".

В конце концов вы можете сделать что-то вроде этого:

document.getElementsByTagName("li")[i].onclick = (function(i) {
    return function() {
        goToURL(i);
    };
}(i));

Поскольку вы отметили вопрос с помощью jQuery, вы можете упростить это:

$('li').each(function(i) {
    $(this).data('url', myURL[i]);
}).click(function() {
    window.open($(this).data('url'), '_blank');
});
  • 0
    Едва даже было напечатано мое первое предложение ...: \
  • 0
    : D :) .........
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню