Как я могу имитировать привязку с помощью jquery?

У меня возникла проблема с подделкой якорного щелчка через jQuery: Почему мой толстый бокс появляется в первый раз, когда я нажимаю кнопку ввода, но не второй или третий раз?

Вот мой код:

<input onclick="$('#thickboxId').click();" type="button" value="Click me" />

<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>

Это всегда срабатывает, когда я нажимаю ссылку непосредственно на ссылку, но не пытаюсь активировать толстый ящик с помощью кнопки ввода. Это в FF. Для Chrome он работает каждый раз. Любые подсказки?

Ответ 1

Старайтесь избегать встраивания ваших вызовов jQuery, подобных этому. Поместите тег script в начало страницы для привязки к событию click:

<script type="text/javascript">
$(function(){
    $('#thickboxButton').click(function(){
        $('#thickboxId').click();
    });
});
</script>

<input id="thickboxButton" type="button" value="Click me">
<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>

Edit:

Если вы пытаетесь имитировать пользователя, физически щелкающего ссылку, я не думаю, что это возможно. Обходным решением будет обновление кнопки click для изменения window.location в Javascript:

<script type="text/javascript">
$(function(){
    $('#thickboxButton').click(function(){
        window.location = $('#thickboxId').attr('href');
    });
});
</script>

Изменить 2:

Теперь, когда я понимаю, что Thickbox - это пользовательский виджет пользовательского jQuery, я нашел инструкции здесь:

Инструкция:

  • Создать элемент ссылки (<a href>)
  • Дайте ссылке атрибут класса со значением thickbox (class="thickbox")
  • В атрибуте href ссылки добавьте следующий якорь: #TB_inline
  • В атрибуте href после #TB_inline добавьте следующую строку запроса к якорю:

    ?

    высота = 300 & ширина = 300 & inlineId = myOnPageContent

  • Измените значения высоты, ширины и inlineId в запросе соответственно (inlineID - это значение идентификатора элемента, содержащего контент, который вы хотите показать в ThickBox.

  • Необязательно вы можете добавить modal = true в строку запроса (например, #TB_inline?height=155&width=300&inlineId=hiddenModalContent&modal=true), так что для закрытия ThickBox потребуется вызвать функцию tb_remove() из ThickBox. См. Пример скрытого модального контента, в котором вы должны нажать "Да" или "Нет", чтобы закрыть ThickBox.

Ответ 2

Что для меня работало:

$('a.mylink')[0].click()

Ответ 3

Недавно я узнал, как вызвать событие щелчка мыши через jQuery.

    <script type="text/javascript">
    var a = $('.path > .to > .element > a')[0];
    var e = document.createEvent('MouseEvents');
    e.initEvent( 'click', true, true );
    a.dispatchEvent(e);
    </script>

Ответ 4

этот подход работает на firefox, chrome и IE. надеюсь, что это поможет кому-то:

var comp = document.getElementById('yourCompId');
try { //in firefox
    comp.click();
    return;
} catch(ex) {}
try { // in chrome
    if(document.createEvent) {
        var e = document.createEvent('MouseEvents');
        e.initEvent( 'click', true, true );
        comp.dispatchEvent(e);
        return;
    }
} catch(ex) {}
try { // in IE
    if(document.createEventObject) {
         var evObj = document.createEventObject();
         comp.fireEvent("onclick", evObj);
         return;
    }
} catch(ex) {}

Ответ 5

Заголовок вопроса гласит: "Как я могу имитировать привязку в jQuery?". Ну, вы можете использовать методы "trigger" или "triggerHandler", например:

<script type="text/javascript" src="path/to/jquery.js"></script>
<script type="text/javascript" src="path/to/thickbox.js"></script>
<script type="text/javascript">
$(function() {
    $('#btn').click(function() {
        $('#thickboxId').triggerHandler('click');
    })
})
</script>
...
<input id="btn" type="button" value="Click me">
<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>

Не тестировался, этот фактический script, но я использовал trigger et al before, и они отлично работали.

UPDATE
triggerHandler фактически не выполняет то, что хочет OP. Я думаю, 1421968 дает лучший ответ на этот вопрос.

Ответ 6

Я бы предложил посмотреть API Selenium, чтобы узнать, как они запускают щелчок по элементу с помощью браузера:

Найдите функцию BrowserBot.prototype.triggerMouseEvent.

Ответ 7

Хотя это очень старый вопрос, мне было легче справиться с этой задачей. Это jquery-плагин, разработанный командой jquery UI под названием simulate. вы можете включить его после jquery, а затем вы можете сделать что-то вроде

<a href="http://stackoverflow.com/"></a>
$('a').simulate('click');

отлично работает в chrome, firefox, opera и IE10. Вы можете скачать его из https://github.com/eduardolundgren/jquery-simulate/blob/master/jquery.simulate.js

Ответ 8

Я считаю, что вы можете использовать:

$('#yourLink').bind('click', function() {
  //Do something over here
});

$('#yourLink').trigger('click');

Это легко вызовет функцию щелчка, не нажимая на нее.

Ответ 9

Вам нужно подделать якорный щелчок? С сайта толстого сайта:

ThickBox можно вызвать из элемента ссылки, элемента ввода (обычно кнопкой) и элемента области (карты изображений).

Если это приемлемо, это должно быть так же просто, как поставить класс толстого слова на сам вход:

<input id="thickboxButton" type="button" class="thickbox" value="Click me">

Если нет, я бы рекомендовал использовать Firebug и поместить контрольную точку в методе onclick элемента привязки, чтобы увидеть, запускается ли он только при первом щелчке.

Edit:

Хорошо, мне пришлось попробовать его для себя и для меня, в точности, ваш код работал как в Chrome, так и в Firefox:

<html>
<head>
<link rel="stylesheet" href="thickbox.css" type="text/css" media="screen" />
</head>
<body>
<script src="jquery-latest.pack.js" type="text/javascript"></script>
<script src="thickbox.js" type="text/javascript"></script>
<input onclick="$('#thickboxId').click();" type="button" value="Click me">
<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>
</body>
</html>

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

Другое возможно, что мы используем разные версии jquery/thickbox. Я использую то, что я получил с толстой страницы - jquery 1.3.2 и thickbox 3.1.

Ответ 10

Используя Jure script, я сделал это, легко "click" столько элементов, сколько вы хотите.
Я просто использовал его в Google Reader на 1600+ объектах, и он отлично работал (в Firefox)!

var e = document.createEvent('MouseEvents');
e.initEvent( 'click', true, true );
$(selector).each(function(){this.dispatchEvent(e);});

Ответ 11

Вы можете создать форму через jQuery или код страницы HTML с действием, которое имитирует вашу ссылку href:

<a id="anchor_link" href="somepath.php">click here</a>.

var link = $('#anchor_link').attr('href');
$('body').append('<form id="new_form" action="'+link+'"></form>');
$('#new_form').submit();

Ответ 12

Чтобы имитировать щелчок на якоре при посадке на странице, я просто использовал jQuery для анимации свойства scrollTop в $(document).ready. Нет необходимости в сложном триггере, и это работает на IE 6 и каждом другом браузере.

Ответ 13

Если вам не нужно использовать JQuery, как я этого не делаю. У меня были проблемы с функцией перекрестного браузера .click(). Поэтому я использую:

eval(document.getElementById('someid').href)

Ответ 14

В Javascript вы можете сделать это

function submitRequest(buttonId) {
    if (document.getElementById(buttonId) == null
            || document.getElementById(buttonId) == undefined) {
        return;
    }
    if (document.getElementById(buttonId).dispatchEvent) {
        var e = document.createEvent("MouseEvents");
        e.initEvent("click", true, true);
        document.getElementById(buttonId).dispatchEvent(e);
    } else {
        document.getElementById(buttonId).click();
    }
}

и вы можете использовать его как

submitRequest("target-element-id");

Ответ 15

JQuery('#left').triggerHandler('click'); отлично работает в Firefox и IE7. Я не тестировал его в других браузерах.

Если вы хотите запускать автоматические клики пользователей, выполните следующие действия:

window.setInterval(function() 
    {
        $('#left').triggerHandler('click');
    }, 1000);

Ответ 16

Это не работает в собственном браузере Android, чтобы щелкнуть элемент "скрытый ввод (файл)":

$('a#swaswararedirectlink')[0].click();

Но это работает:

$("#input-file").show();
$("#input-file")[0].click();
$("#input-file").hide();

Ответ 17

При попытке имитировать 'click' в модульных тестах с помощью jQuery UI spinner я не смог получить ни один из предыдущих ответов для работы. В частности, я пытался имитировать "вращение" выбора стрелки вниз. Я просмотрел тесты jQuery UI spinner unit, и они используют следующий метод, который работал у меня:

element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup();