Как я могу имитировать привязку с помощью 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();