jQuery: триггер click() не работает?
почему нажав на trigger1
и trigger2
не стрелять нажмите на open
?
<a id="trigger1" href="#" onclick="jQuery('#open').trigger('click');">trigger1</a>
<a id="trigger2" href="#" onclick="jQuery('#open').click();">trigger2</a>
<a id="open" href="http://google.com">open</a>
используя готов (trigger3
) тоже не работает:
<a id="trigger3" href="#">trigger3</a>
...
jQuery(document).ready(function(){
jQuery('#trigger3').bind('click', function(){
jQuery('#open').html('to be fired'); /* works */
jQuery('#open').click();
});
jQuery('#trigger3').click(function(){
jQuery('#open').html('to be fired'); /* works */
jQuery('#open').click();
});
});
6 ответов
важно уточнить, что делать jQuery('#open').click()
не выполняет атрибут href тега привязки, поэтому вы не будете перенаправлены. Он выполняет onclick
событие #open
которых не определен.
вы можете выполнить перенаправление и возможность вызвать его с помощью оригинального jQuery('#open').click()
код, давая #open
событие click:
jQuery('#open').click( function (e) {
window.location.href = this.href;
});
из того, как выглядит ваш код, вы хотите, когда пользователь нажимает на ссылку один или два (триггер 1 или 2) вы хотите ссылку в open
следовать?
если это так, .click()
на самом деле это не та функция, которую вы хотите, на самом деле jQuery, похоже, не предлагает метод прямого нажатия на элемент привязки. Что он будет делать, это вызвать любое событие, которое прикреплено к элементу.
взгляните на это пример:
<a id="trigger" href="#" onclick="$('#open').click();">trigger</a>
<a id="open" href="http://google.com">open</a>
jQuery:
$('#open').click(function(){
alert('I just got clicked!');
});
таким образом, есть событие, прикрепленное к элементу с идентификатором open
это просто предупреждает, чтобы сказать, что он был нажат. Нажатие на ссылку триггера просто запускает событие click на элементе с идентификатором open
. Так что это не будет делать то, что вы хотите! он будет запускать любые события, но на самом деле он не будет следовать по ссылке
я удалил 2-й триггер, потому что .click()
это просто прокси для .trigger('click')
так они делают то же самое!
таким образом, чтобы вызвать фактический щелчок по якорю, вам придется сделать немного больше работы. Чтобы сделать это немного более повторно, я бы изменил ваш HTML немного (я объясню почему через минуту):
<a href="#" class="trigger" rel="#open">trigger google</a>
<a id="open" href="http://google.com">google</a>
<br/><br/>
<a href="#" class="trigger" rel="#bing">trigger bing</a>
<a id="bing" href="http://bing.com">bing</a>
jQuery (короткий):
$('.trigger').click(function(e){
e.preventDefault();
window.location = $($(this).attr('rel')).attr('href');
});
или:
$('.trigger').click(function(e){
e.preventDefault();
var obj = $(this).attr('rel');
var link = $(obj).attr('href');
window.location = link;
});
в основном любая ссылка, по которой вы хотите следовать другому элементу, добавляет class="trigger"
to, таким образом, он повторно используется. В элементе, который вы добавили class
to, добавить rel="#element-to-be-clicked"
это позволит вам настроить несколько кликов по разным ссылкам.
- таким образом, теперь вы захватываете любые клики по элементу с помощью
class="trigger"
- Поиск элемент, на который вы хотели нажать
rel="#element-to-be-clicked"
- получение
href
адрес из элемента - изменение местоположения windows на новую ссылку
попробовать с удалением onclick="jQuery('#open').click();"
также попробуйте положить $('#trigger1')
вы используете jQuery('#trigger3')
On JSFIDDLE здесь.
попробуйте это:
jQuery(document).ready(function(){
jQuery('#trigger3').bind('click', function(){
jQuery('#open').text('to be fired'); /* works */
jQuery('#open').click();
});
jQuery('#trigger3').click(function(){
jQuery('#open').text('to be fired'); /* works */
jQuery('#open').click();
});
});
jQuery ('#open').html ('to be fired'); изменит его на просто текст. Вот почему 2nd select не работает.
существует 3 типа ссылок в зависимости от href
содержание :
1) - это URL-адрес
2) The href
это вызов javascript, такой как"javascript:"
3) The href
бесполезно ( " # ", " javascript:void(0)",...), функция непосредственно связана по ссылке
вот почему я делаю этот маленький плагин для вызова метода :
(function( $ ){
$.fn.triggerClick = function() {
var href = $(this).attr('href');
//No useful link into href, try to call js click
if(href.indexOf('#') == 0 || href.indexOf('javascript:void(') == 0 || href == '') {
$(this).click();
//JS call
} else if(href.indexOf('javascript:') == 0) {
eval(href);
//URL
} else {
document.location.href = href;
}
};
})( jQuery );
чтобы вызвать его, просто используйте $('DOMelement').triggerClick()
.
Надеюсь, это поможет.
(Этот плагин является прототипом. Спасибо скажите мне, если есть какие-то ошибки...)