Глобальный обработчик ссылок Javascript - PullRequest
2 голосов
/ 18 августа 2011

Вот что у меня есть:

  • Веб-приложение, которое запускается на одной HTML-странице (назовите ее myapp.req), а контент поступает и отправляется через AJAX
  • Приложение может быть введено извне с помощью ссылки, такой как myapp.req?id=123, и приложение открывает вкладку с элементом с идентификатором 123
  • Содержимое на странице в основном пользовательское и часто содержит ссылки внутри приложения на myapp.req?id=123
  • Проблема заключается в том, что нажатие на ссылку myapp.req?id=123 перезагружает браузер и удаляет любой контент или состояние, загруженное пользователем

То, что я хочу, - это иметь возможность отлавливать щелчки по ссылкам, назначение которых myapp.req?id=123, и вместо перезагрузки страницы просто откройте вкладку для элемента 123, оставив все остальное в данный момент загруженным в одиночку. Однако, если ссылка предназначена для внешнего веб-сайта, просто оставьте браузер закрытым.

Так что мой вопрос действительно: могу ли я иметь глобальный обработчик ссылок, который проверяет, хочу ли я обрабатывать щелчок по ссылке, и, если да, запустить какой-нибудь javascript и не выходить?

Я понимаю, что могу найти все <a> и добавить прослушиватели, но я надеюсь, что решение потребует настройки прослушивателя только один раз, а не добавления обработчиков ссылок каждый раз, когда на страницу загружается новый контент. Поскольку контент можно загружать разными способами, было бы неудобно добавлять код во все эти места.

Имеет ли это смысл? Спасибо за любую помощь или предложения!

Ответы [ 3 ]

2 голосов
/ 18 августа 2011

JQuery's live - это то, что вам нужно:

$('a').live("click", function () {
    var myID = $(this).attr('href').match(/id=([a-zA-Z0-9_-]*)\&?/)[1];
    if (myID) {
        //run code here
        alert(myID);
        return false;
    }
});

Любая ссылка теперь будет иметь этот обработчик кликов, независимо от того, был ли он добавлен после вызова или нет.

1 голос
/ 18 августа 2011

Конечно, вы можете. Добавьте обработчик кликов на теле. Таким образом, вы ловите все клики. Затем вы должны проверить, является ли целью события или одного из его родителей ссылка с вашим конкретным href. В этом случае остановите событие и откройте вкладку.

0 голосов
/ 18 августа 2011

обновлено для использования .live вместо .click

Если вы используете jQuery, вы можете добавить «живой» обработчик события щелчка сразу к каждому a href:

<body>
    <a href="app.req?id=123&test=432">click here</a>
    <br/>
    <a href="http://whatever.com">whatever</a>
</body>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript"> 
$('a').live('click',function() {
    var myID = $(this).attr('href').match(/id=([a-zA-Z0-9_-]*)\&?/)[1];
    if (myID) {
        //run code here
        alert(myID);
        return false;
    }
});
</script>

Это должно извлечь идентификатор из строки запроса href и позволить вам делать с ней все, что вы захотите.

...