Пользовательское событие в HTML, Javascript - PullRequest
7 голосов
/ 28 октября 2011

Я хочу создать пользовательское событие в HTML, JS.

<input type="text" oncustombind="foo(event);" />

Как я могу создать один такой? «oncustombind» - это пользовательское событие, которое я хочу создать. Я должен быть в состоянии вызвать функцию / код, определенный в атрибуте oncustombind. Также мне нужно передать некоторые данные в объект события.

Я не хочу использовать какие-либо библиотеки, такие как jquery, YUI.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

9 голосов
/ 28 октября 2011

Вы хотите CustomEvent

С ними должно быть легко работать, но поддержка браузера слабая.Однако DOM-шим должен это исправить.

var ev = new CustomEvent("someString");
var el = document.getElementById("someElement");
el.addEventListener("someString", function (ev) {
    // should work
});
el.dispatchEvent(ev);
4 голосов
/ 28 октября 2011

Неправильно использовать new Function и with, но это можно сделать следующим образом: http://jsfiddle.net/pimvdb/72GwE/13/.

function trigger(elem, name, e) {
    var func = new Function('e',

      'with(document) {'
    + 'with(this) {'
    + elem.getAttribute('on' + name)
    + '}'
    + '}');

    func.call(elem, e);
}

Со следующим HTML:

<input type="text" oncustombind="console.log(e, type, getElementById);" id="x">

затем вызвать событие как:

trigger(document.getElementById('x'), 'custombind', {foo: 123});
...