Подтвердить что ты не робот

Использование jQuery для запуска html события onclick

<input type="text" id="test_value" name="test_value" value="xyz" />
<input id="test_default" name="test_default" type="checkbox" onclick="with(this.form.elements['test_value']) { disabled = this.checked; if (this.checked) { value = ''; } else {if(value=='') {value=' '; value = '';}}};" />

Встроенный onclick генерируется cms, с которым я не контролирую. Я хочу выполнить $("#test_default").click(); с помощью jQuery, но это не работает, потому что оно не связано с менеджером событий jQuery.

Я пробовал варианты

$("#test_default").click(function (e) {
                    $(e.target).attr("onclick").apply(checkbox, [e]);
                    return false;
                }).click();

но безрезультатно. Пожалуйста, помогите.

Спасибо.

Существуют десятки различных функций, которые могут быть встроены в onclick. На самом деле это не вариант, чтобы дублировать их и запускать их параллельно.

Ответы работают в небольшой демонстрации, но не в живой среде. Посмотрите http://jsfiddle.net/GtJjt/ Мне нужно, чтобы флажок запускался программно.

Необычно только $("#metadata_field_text_10190_default")[0].click(); запускает событие правильно. Кто-нибудь может это объяснить?

4b9b3361

Ответ 1

Прямой вызов собственного DOM onclick (см. демонстрацию):

$("#test_default")[0].onclick();

Или, без jQuery вообще,

document.getElementById("test_default").onclick();

Update:

Реальная проблема связана с взаимодействием между jQuery .click() и встроенным кодом onclick. jQuery .click() фактически выполняет две вещи: он сначала запускает любые обработчики событий, включая код inline onclick, , а затем он вызывает флажок для проверки.

Проблема возникает из-за того, что встроенный код проверяет, установлен ли флажок. Поскольку это сначала инициируется, код обнаруживает, что флажок не отмечен и ничего не делает. Теперь, после этого, jQuery затем отправляется и проверяет флажок.

Как мы это исправим? Сначала мы проверяем флажок, а затем вызываем встроенный обработчик. К сожалению, мы не можем использовать jQuery .click() для вызова обработчика inline, потому что он снова снимет флажок (он также вызовет другие обработчики событий jQuery, если вы добавите их в будущем, вы, вероятно, не хотите, чтобы). Поэтому мы используем собственный DOM-метод, описанный мной ранее, поскольку его единственным эффектом является запуск встроенного кода.

Конечный код:

$("#metadata_field_text_10190_default").attr("checked", true)[0].onclick();

См. демонстрацию: http://jsfiddle.net/GtJjt/3/. (Я включил console.log в встроенный код для демонстрации, чтобы доказать, что встроенный код запущен. Удалите это, если ваш браузер не Firefox или Chrome или он не сработает).

Обновить снова:

Я не видел твое решение раньше Саймона, спасибо, что напомнил мне о [0].click(). По сути, это родной эквивалент для jQuery .click() и работает, потому что он выполняет то, что я описал выше (сначала установите флажок, а затем вызовите встроенный код). Предупреждение: это также вызовет любые обработчики событий, связанные с jQuery, которые могут быть не такими, какие вы хотите.

Ответ 2

Я использовал триггер в html с событием onclick следующим образом:

$("#test_default").trigger("onclick");

Ответ 3

Просто не return false, и он будет вызван:

$("#test_default").click(function (e) {
  //hi!
}).click();

Если вы хотите предотвратить действие по умолчанию, вместо этого используйте e.peventDefault(), который не будет убивать событие. Кроме того, что касается вашего встроенного обработчика onclick (почему бы не сделать это все ненавязчиво?), Я настоятельно рекомендую использовать with.

Ответ 4

Я использую следующий код:

$("your_selector")[0].click();

В вашем случае:

 $("#test_default")[0].click();