Префикс URL в функции window.open jQuery - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть этот HTML:

<a href="#" onclick="window.open('TrackPackage.asp?ID=4', '', 'settings');">Track Your Package »</a>

Кто-то на этом сайте смог предоставить мне скрипт для префикса URL с доменом http://www.example.com/ Вот скрипт:

$(document).ready(function(){
$('a[onclick^="window.open(\'TrackPackage.asp"]').attr('onClick', $('a[onclick^="window.open(\'TrackPackage.asp"]').attr('onClick').replace("window.open('", "window.open('http://www.example.com/"));
});

Однако у меня возникли небольшие проблемы с этим:
Первая проблема - это наличие нескольких экземпляров элемента. Вот скрипка: http://jsfiddle.net/VMmZx/
Вместо того, чтобы один якорь был подписан ID=4, а другой - ID=5, как предполагалось, они оба подписаны ID=4.
Идея состоит в том, что каждая функция window.open должна иметь префикс http://www.example.com, однако оставшаяся часть URL должна оставаться неизменной ...

Вторая проблема, с которой я сталкиваюсь, это когда элемент не существует на странице, остальная часть jQuery не работает ...
Вот еще одна скрипка: http://jsfiddle.net/VPf32/
<a> должен получить класс foo, но поскольку элемент не существует на странице, jQuery не выполняется.
Поскольку JavaScript включен в шаблон HTML сервера ASP.NET, это может создать много проблем.

Надеюсь, я был ясен, и вы можете мне помочь. Спасибо.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012

Вы можете использовать .each(), чтобы перебрать каждый соответствующий элемент и изменить их индивидуально:

$('a[onclick^="window.open(\'TrackPackage.asp"]').each(function(index, element) {
    element = $(element);
    element.attr('onclick', element.attr('onclick').replace(/open\('/, 'open(\'http://www.example.com/'));
});​

Однако я не думаю, что использование ссылок с href из # и onclick открытием окна настолько семантически, насколько это возможно. Если возможно, попробуйте изменить разметку следующим образом:

<a href="TrackPackage.asp?ID=4" target="_blank">Track Your Package »</a>

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

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

0 голосов
/ 15 февраля 2012

Почему вы делаете клик, даже встроенный, как это?Я бы просто вывел ссылки вроде:

<a href="/path/to/file.html" target="_blank">Link Text</a>

А потом:

$('a[target=_blank]').click(function(){
   var prefix = 'http://domain.com';
   window.open(prefix + $(this).attr('href'));
});
...