Я могу назвать щелчок jQuery (), чтобы перейти <a> по ссылке, если я не связал обработчик событий с ним с, связывают или уже нажимают?

У меня была эта проблема в программе, которую я записал год назад - оказывается, что ответ является скорее сложным. Необходимо будет использовать nohup, а также перенаправление вывода, как объяснено в Википедии artcle на nohup, скопированный здесь для удобства.

задания Nohuping фона, например, полезны, когда зарегистрировано на пути SSH, так как фоновые задания могут заставить оболочку зависать на выходе из системы из-за состояния состязания [2]. Эта проблема может также быть преодолена путем перенаправления всех трех потоков ввода-вывода:

nohup myprogram > foo.out 2> foo.err < /dev/null &

175
задан SharpC 5 December 2016 в 22:20
поделиться

4 ответа

Interesting, this is probably a "feature request" (ie bug) for jQuery. The jQuery click event only triggers the click action (called onClick event on the DOM) on the element if you bind a jQuery event to the element. You should go to jQuery mailing lists ( http://forum.jquery.com/ ) and report this. This might be the wanted behavior, but I don't think so.

EDIT:

I did some testing and what you said is wrong, even if you bind a function to an 'a' tag it still doesn't take you to the website specified by the href attribute. Try the following code:

<html>
<head>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
 <script>
  $(document).ready(function() {
   /* Try to dis-comment this:
   $('#a').click(function () {
    alert('jQuery.click()');
    return true;
   });
   */
  });
  function button_onClick() {
   $('#a').click();
  }
  function a_onClick() {
   alert('a_onClick');
  }
 </script>

</head>
<body>
 <input type="button" onclick="button_onClick()">
 <br>
 <a id='a' href='http://www.google.com' onClick="a_onClick()"> aaa </a>

</body>
</html> 

It never goes to google.com unless you directly click on the link (with or without the commented code). Also notice that even if you bind the click event to the link it still doesn't go purple once you click the button. It only goes purple if you click the link directly.

I did some research and it seems that the .click is not suppose to work with 'a' tags because the browser does not suport "fake clicking" with javascript. I mean, you can't "click" an element with javascript. With 'a' tags you can trigger its onClick event but the link won't change colors (to the visited link color, the default is purple in most browsers). So it wouldn't make sense to make the $().click event work with 'a' tags since the act of going to the href attribute is not a part of the onClick event, but hardcoded in the browser.

89
ответ дан 23 November 2019 в 20:25
поделиться

Если вы посмотрите на код функции $. Click , я уверен, что есть условный оператор, который проверяет, есть ли у элемента зарегистрированные для щелкните событие , прежде чем оно продолжится. Почему бы просто не получить атрибут href из ссылки и вручную изменить расположение страницы?

 window.location.href = $('a').attr('href');

РЕДАКТИРОВАТЬ: Вот почему он не нажимается, из функции триггера , jQuery источник для версии 1.3.2:

 // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
    if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
        event.result = false;

    // Trigger the native events (except for clicks on links)
    if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
        this.triggered = true;
        try {
            elem[ type ]();
        // prevent IE from throwing an error for some hidden elements
        } catch (e) {}
    }

После вызова обработчиков (если они есть) jQuery запускает событие для объекта. Однако он вызывает только собственные обработчики событий щелчка, если элемент не является ссылкой. Я предполагаю, что это было сделано специально, почему-то. Это должно быть правдой независимо от того, определен ли обработчик событий или нет, поэтому я Не знаю, почему в вашем случае присоединение обработчика событий вызвало вызов собственного onClick обработчика. Вам нужно будет сделать то же, что и я, и пройти через выполнение, чтобы увидеть, откуда оно вызывается.

64
ответ дан 23 November 2019 в 20:25
поделиться

Обработчики кликов по тегам привязки - это особый случай в jQuery.

Я думаю, вы можете запутаться между событием привязки onclick (известным браузеру) и событием click в jQuery

Вы можете загрузить исходный код jQuery 1.3.2 здесь .

Соответствующие разделы источника - это строки 2643–2645 (я разделил это на несколько строк, чтобы облегчить понимание):

// Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
if (
     (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && 
       elem["on"+type] && 
       elem["on"+type].apply( elem, data ) === false
   )
     event.result = false;
5
ответ дан 23 November 2019 в 20:25
поделиться

Он ничего не делает, потому что с событием не было привязано ни одного события. Если я правильно помню, jQuery поддерживает свой собственный список обработчиков событий, которые привязаны к NodeLists для производительности и других целей.

2
ответ дан 23 November 2019 в 20:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: