Предотвращение дефолта, внесение изменений и продолжение рутины
У меня есть небольшой сайт со сценарием, который выполняет запрос с помощью MySQL и возвращает мне некоторые данные, включая домены. Эти домены сгенерированы HTML-ссылки, и я хочу изменить в JavaScript, так как я не могу получить доступ к части PHP, но да, чтобы JavaScript и CSS-код.
Я просто хочу, чтобы вы запускали код, когда по ссылке запускается событие click. Я попытался остановить выполнение по умолчанию и внести изменения, но мой код не открывает страницу. Если я удаляю protectDefault работает только в Firefox, но у меня нет Chrome. (не использовать window.open, я хочу изменить исходную ссылку).
var domains = document.getElementsByClassName("domain");
for(var x = 0; x < domains.length; x++){
if(domains[x].addEventListener) {
domains[x].addEventListener("click", changeLink, "false");
} else if(domains[x].attachEvent) {
domains[x].attachEvent("onclick", changeLink);
}
}
function changeLink(evt){
var urlOriginal = this.href;
// If I remove preventDefault, the function runs correctly on firefox but not in chrome
evt.preventDefault();
if(urlOriginal != 'http://google.com') {
urlOriginal = urlOriginal.replace(/http:\/\//g, '');
evt.stopPropagation();
this.href = 'http://intodns.com/' + urlOriginal;
console.log('Okay !');
}
return true;
}
Я перепробовал несколько изменений, но ни один не запущен, не совсем так.
Кто-нибудь знает причину неисправности? Как я могу это исправить без window.open?
Спасибо
2 ответа
Пытаться stopPropagation
вместо
http://api.jquery.com/event.stoppropagation/ - узнайте больше об этом
Если я правильно понимаю, вы хотите перенаправить пользователя на другую ссылку вместо той, которая установлена в href
приписывать.
Однажды click
сделано, ничего не произойдет, если вы измените href
атрибут элемента. То, что вы ищете, это перенаправление пользователя, и это стало возможным благодаря изменению location
объект, который находится на window
,
Вместо этой строки:
this.href = 'http://intodns.com/' + urlOriginal;
Попробуй это:
window.location = 'http://intodns.com/' + urlOriginal;