2010-10-27 2 views
0

Есть ли способ программно в javascript вызвать собственное событие click тега? Функции .trigger ('click') или .click() не будут работать, потому что они вызывают событие onClick ссылки, а не событие, следующее за URL-адресом. Мне нужно программно щелкнуть скрытую ссылку и перейти по этой ссылке к новой вкладке в том же браузере. Window.open не будет работать, потому что это вызовет всплывающее окно, и я стараюсь избегать этого. Мне нужно это, потому что я динамически генерирую URL-адрес на стороне сервера и отправляю ответы через JSON. Затем я заполняю атрибут HREF скрытой ссылки с результирующим URL-адресом. Если я смогу получить ответ о том, как это можно сделать, я был бы очень признателен.HTML <a> Native Click Event

ответ

1

Из того, что я могу сказать, нельзя назвать функцию прямого щелчка ссылки через javascript. Вы можете ссылаться на onclick, используя .click(), но внутренний клик все равно будет выполняться до того, как он будет вызван. Итак, если вы хотите изменить ссылку, прежде чем следовать ей, когда вы нажмете ссылку, вам придется дважды щелкнуть ссылку, прежде чем она отправит вас на измененную ссылку.

2

Если вы заполняете HREF с ответом JSON, почему бы просто не сохранить его в переменной вместо этого, и когда вы хотите перейти к нему, window.location = yourVariable;?

+0

window.location не работает для меня, потому что я не хочу открывать ссылку на текущей вкладке и заменять текущую страницу. Мне нужно, чтобы он перешел на новую вкладку. – usherjer

+0

Согласен, я не вижу смысла назначать URL-адрес скрытой ссылке, чтобы вы могли ее щелкнуть. Есть гораздо больше прямых способов для перехода на новое место. – meagar

+2

@usherjer Если вы хотите, чтобы он открывался на новой вкладке, используйте 'window.open'. Открывается ли это на вкладке или в новом окне, зависит от браузера, так как не все браузеры поддерживают вкладки. Невозможно специально настроить браузер для открытия ссылки на новой вкладке. – meagar

2

Если вы хотите, чтобы это работало только с IE, у меня нет ответа для вас, но я могу вам сказать, в чем проблема. Проблема target=_blank. Попробуйте следующий код в качестве теста - обратите внимание, что он приведет вас к Google.com - затем попробуйте написать «_blank» в качестве цели. Кажется, это единственное, что браузеры не позволят. Частичный ответ на ваш вопрос: fireEvent() работает с IE и dispatchEvent() работает со всем остальным. Если бы кто-то еще мог улучшить этот код, я был бы признателен за лучший ответ.

<html> 
<head> 
<script type="text/javascript"> 
window.onload = function fireElement() { 
var target=document.getElementById('foobar'); 
if(document.dispatchEvent) { // W3C 
var oEvent = document.createEvent("MouseEvents"); 
oEvent.initMouseEvent("click", true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, target); 
target.dispatchEvent(oEvent); 
} 
else if(document.fireEvent) { // IE 
target.fireEvent("onclick"); 
} 
} 
</script> 

</head> 
<body> 
<div> 
<a id="foobar" target="" href="http://www.google.com"></a> 
</div> 
</body> 
</html>