2008-09-25 2 views
70

Как программно принудительно включить событие onchange на входе?Как программно принудительно включить событие onchange на входе?

Я пытался что-то вроде этого:

var code = ele.getAttribute('onchange'); 
eval(code); 

Но моя конечная цель стрелять любые функции слушателя, и это не похоже на работу. Также не обновляется атрибут value.

ответ

56

ugh не использует eval для ничего. Ну, есть определенные вещи, но они крайне редки. Скорее, вы могли бы сделать это:

document.getElementById("test").onchange() 

Посмотрите здесь больше вариантов: http://jehiah.cz/archive/firing-javascript-events-properly

+3

eval для объективирования JSON;) – 2008-09-25 22:39:07

+0

Согласовано об eval - я вытащил этот код из http://stackoverflow.com/questions/33860/is-it-possible-to-call-javascripts-onsubmit-event-programatically-on- a-form как пример чего-то, чего я не хочу. – Soldarnal 2008-09-25 23:00:51

+0

Это не работает в IE7. Исключение «объект не поддерживает это свойство или метод» - вы тоже это видите? – theJerm 2010-11-29 20:41:04

-3

если вы используете JQuery вы бы:

$('#elementId').change(function() { alert('Do Stuff'); }); 

или MS AJAX:

$addHandler($get('elementId'), 'change', function(){ alert('Do Stuff'); }); 

Или в сыром HTML элемента:

<input type="text" onchange="alert('Do Stuff');" id="myElement" /> 

После повторного Прочитав вопрос, я думаю, что пропущу, что делать. Я никогда не нашел способ обновления элемента DOM в манере, которая заставит событие изменения, что вы лучше делаете, имея отдельный метод обработчика событий, например:

$addHandler($get('elementId'), 'change', elementChanged); 
function elementChanged(){ 
    alert('Do Stuff!'); 
} 
function editElement(){ 
    var el = $get('elementId'); 
    el.value = 'something new'; 
    elementChanged(); 
} 

Поскольку вы уже написав метод JavaScript, который будет изменять, это всего лишь одна дополнительная строка для вызова.

Или, если вы являются с использованием структуры Microsoft AJAX вы можете получить доступ ко всем обработчиков событий с помощью:

$get('elementId')._events 

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

+1

Я считаю, что он хочет запустить реальное событие, а не запускать функцию при запуске события ... i _think_. lol – Kolten 2008-09-25 22:49:40

1

Взятые из нижней части QUnit

function triggerEvent(elem, type, event) { 
    if ($.browser.mozilla || $.browser.opera) { 
     event = document.createEvent("MouseEvents"); 
     event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, 
      0, 0, 0, 0, 0, false, false, false, false, 0, null); 
     elem.dispatchEvent(event); 
    } else if ($.browser.msie) { 
     elem.fireEvent("on"+type); 
    } 
} 

Вы можете, конечно, заменить $. браузера для собственных методов обнаружения браузера, чтобы сделать его независимым от jQuery.

Чтобы использовать эту функцию:

var event; 
triggerEvent(ele, "change", event); 

Это в основном огонь реальное событие DOM, как будто что-то на самом деле изменилось.

21

Почему-то один.onchange() выбрасывает «метод не найден» для меня в IE на моей странице, поэтому я использовал эту функцию из ссылки Kolten, предоставленной и вызванной fireEvent (ele, 'change'), которая работала:

Я тем не менее, создать тестовую страницу, подтвердивших призывающую должны OnChange() работать:

<input id="test1" name="test1" value="Hello" onchange="alert(this.value);"/> 
<input type="button" onclick="document.getElementById('test1').onchange();" value="Say Hello"/> 

Edit: причина ele.onchange() не работа, потому что я на самом деле не объявленную ничего для событие onchange. Но fireEvent все еще работает.

83

В JQuery я в основном использовать:

$("#element").trigger("change"); 
-3

Использование JQuery вы можете сделать следующее:

// for the element which uses ID 
$("#id").trigger("change"); 

// for the element which uses class name 
$(".class_name").trigger("change"); 
38

Создать Event объект и передать его dispatchEvent метод элемента:

var element = document.getElementById('just_an_example'); 
var event = new Event('change'); 
element.dispatchEvent(event); 

Это вызовет прослушиватели событий независимо от того, будут ли они регистрируется путем вызова метода addEventListener или путем установки свойства onchange элемента.


Если вы хотите событие пузыря, передать второй аргумент Event конструктор:

var event = new Event('change', { bubbles: true }); 

Информация о браузере Совместимость:

Смежные вопросы