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

попробуй вот!--30-->

или:

$('.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 здесь.


вы связываете событие click до #trigger3 два раза. удалите один из них


попробуйте это:

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().
Надеюсь, это поможет. (Этот плагин является прототипом. Спасибо скажите мне, если есть какие-то ошибки...)