Определение тега привязки при вызове href - PullRequest
0 голосов
/ 16 июня 2009

Как определить в функции, была ли она вызвана тегом привязки href?

В этом случае событие

является нулевым. Так что event.target и event.srcElement не будут работать.

Код

HTML

<a href="SomeFunction();">Href works here</a>

JavaScript

   function SomeFunction ()
   {
      // I need to get the anchor element that invoked this function
   }

Ответы [ 3 ]

2 голосов
/ 16 июня 2009

А как же

<a href="SomeFunction(this);">Href works here</a>

function SomeFunction(context) {

    var callingElement = context;

}
1 голос
/ 16 июня 2009

Следуя предложенному @alex, можете ли вы добавить скрипт для запуска при загрузке страницы, чтобы изменить hrefs на то, что вы хотите (добавив ссылку 'this')?

Взять, к примеру, следующий скрипт, это изменит значение href для тегов привязки с id, установленным в SomeID, или в классе, установленным в SomeClass:

function changeLinks() {
    var all_links = document.getElementsByTagName("a");
    for (var i=0; i<all_links.length; i++){
        if (all_links[i].id == 'SomeID' || all_links[i].className == 'SomeClass') {
            all_links[i].href = 'SomeFunction(this);';
        }
    }
}

Надеюсь, это поможет ...

Редактировать : После вашего комментария вы можете попробовать это:

var clickedAnchor = null;

function setClickedAnchor(obj) {
    clickedAnchor = obj;
}
function changeLinks() {
    var all_links = document.getElementsByTagName("a");
    for (var i=0; i<all_links.length; i++){
        if (all_links[i].id == 'SomeID' || all_links[i].className == 'SomeClass') {
            all_links[i].href = 'setClickedAnchor(this);' + all_links[i].href;
        }
    }
}
0 голосов
/ 16 июня 2009

Насколько я знаю, есть только два способа сделать это, используя стандартный Javascript. Первый путь уже обрисован в общих чертах - передать узел в качестве параметра функции. Другой способ - обработать событие onclick привязки. Это очень похоже на предыдущий подход, который требует, чтобы вы изменили разметку, чтобы передать параметр в функцию. Для этого вам нужно изменить разметку на следующую:

<a href="#" onclick="SomeFunction(event)">Href works here</a>

function SomeFunction(event) {
    var node = event.srcElement;
}

Приведенный выше код передает объект события в функцию, которая предоставляет вам всю интересную информацию о событии.

Если вы не можете изменить разметку, отправляемую в браузер, вы можете рассмотреть возможность использования чего-либо вроде JQuery или другой библиотеки AJAX для поиска и изменения обработчиков событий узлов во время выполнения. Очевидно, предпочтительнее изменить разметку до , которая попадает в браузер, но иногда у вас нет выбора.

И наконец, если вы не можете изменить разметку и не хотите изменять DOM во время выполнения, вы всегда можете увидеть, какие специфические функции движка Javascript доступны. Например, вы можете использовать arguments.caller в тех движках, которые его поддерживают. Я не говорю, что это сработает, но вы можете посмотреть, что доступно.

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