2012-02-15 4 views
0

У меня есть этот HTML:Префикс URL-адрес в window.open функции JQuery

<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, это может создать множество проблем.

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

ответ

0

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

<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')); 
}); 
+2

HTML, к сожалению, не под моим контролем. Я слышал то же самое много раз и давно бы это сделал ... – henryaaron

+0

Ahh досады только с правом доступа к интерфейсу. – prodigitalson

+0

Yesss ... это убивает меня. Возможно, однажды, я смогу написать свое собственное программное обеспечение;) – henryaaron

2

Вы можете использовать .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

Это на самом деле делает другие проблемы для меня ... он не может оценить неопределенную функцию. Исходный jQuery работает ... Мне нужен еще один скрипт. – henryaaron

+0

HTML, к сожалению, не под моим контролем. Я слышал то же самое много раз и давно бы сделал это ... – henryaaron