Отправка события клика на родительский якорь - PullRequest
4 голосов
/ 03 декабря 2009

Как отправить событие click (JS или JQuery) родительскому объекту, который является якорем? Мой основной HTML выглядит так:

<a href="javascript:myFunc(1,2,3)">
  <img id="btn1" src="myimg.png">
</a>

Так что я могу легко ссылаться на кнопку привязки через кнопку:

document.getElementById('btn1').parentNode

Однако

document.getElementById('btn1').parentNode.click

, хотя кажется, что в firebug не возникает ошибка в консоли, функция javascript, похоже, тоже не запускается. Как мне отправить клик на эту вещь. Кстати, у меня нет контроля над HTML, поэтому я не могу просто добавить идентификатор в тег привязки.

Ответы [ 4 ]

4 голосов
/ 04 декабря 2009

Прошли те времена, когда можно использовать href="javascript:blah", особенно если вы используете такие библиотеки, как jQuery, Dojo, ExtJs или другие. Обработчики событий всегда должны быть подключены вне HTML.

$(function() {
    $("#btn1").click(function() {
        $(this).parent().click();
    };
});

Вот фрагмент кода, который вы можете проверить на SO-страницах (скопировать + вставить в Firebug)

$("#hlogo a").click(function() {
    alert("a!");
    return false;
});

$("#hlogo a img").click(function() {
    alert("img!");
    $(this).parent().click();
});
0 голосов
/ 04 декабря 2009

JQuery, может быть, так:

$(event.target).closest('a').trigger('click')

или в твоих словах что-то вроде этого

$('#bth1').closest('a').trigger('click')
0 голосов
/ 03 декабря 2009

РЕДАКТИРОВАТЬ: игнорируйте этот ответ, поскольку он не годится для ссылок; см. комментарии ниже.

Свойство click элемента a является свойством функции, или методом; все, что вы делаете, ссылаетесь на свойство, а не вызываете его.

document.getElementById('btn1').parentNode.click();

(обратите внимание, (), чтобы вызвать метод) должен сделать это, хотя, если вы уже используете jQuery, Ответ Джонатана Сэмпсона сделает то, что вам нужно - нет смысла загружать библиотеки, а затем не использовать ее: -)

Хотя ответ Джонатана можно сократить, так как jQuery предоставляет метод click :

$("#btn1").parent().click();
0 голосов
/ 03 декабря 2009

Нормальные ссылки с нормальными HREF

// assuming the link is always the immediate parent of #btn1
$("#btn1").parent().trigger("click");

Ссылки с Javascript-командами как HREF

Я отмечаю, что в вашем случае значение HREF является вызовом функции javascript с параметрами. Для этого вы можете оценить этот HREF, а не щелкать по ссылке:

// run the href-javascript from the parent anchor
eval($("#btn1").parent().attr("href"));

Я создал тестовый набор и использовал firebug, чтобы попробовать оба метода. Первый возвращает 1, показывая, что ссылка была нажата, но JavaScript никогда не выполняется. Второй метод на самом деле выполняет JavaScript, найденный в значении HREF самой ссылки. Это должно быть адекватным решением вашей конкретной потребности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...