javascript setAttribute динамически - PullRequest
1 голос
/ 11 августа 2011

Я пытаюсь динамически применить событие к элементу в моем приложении.

Когда я использую onclick, я получаю предупреждение, чтобы всплыть.

el.setAttribute('onclick', 'alert("hi")',0);

Когда я пытаюсь использовать onkeypress, ничего не происходит.

el.setAttribute('onkeypress', 'alert("Hi");',0); 

Мне действительно нужно иметь доступ к onkeypress. Есть ли что-то, что я делаю неправильно? Является ли setAttribute не лучшим способом добиться того, что я делаю? Если да, каковы мои альтернативы динамической установке события для определенного элемента?

UPDATE:

Чтобы ответить на несколько вопросов ниже, когда я это сделаю:

el.setAttribute('onkeypress','numericOverride(this)',0);

Когда я смотрю на источник в Firebug, я вижу следующее:

<div id="objSCR" class="txtbox" onmousedown="pfocus(this, '', '');" style="color:#0000FF; width:62px; height:12px; top:76px; left:120px; text-align:right; color:#0000FF;" ptmulti="false" pttype="E" ptlayndx="4" ptdisp="false" ppopup="" plength="12" onchange="numericOverride(this)">4000.00</div>

Однако, когда я изменяю значение текста, я получаю вывод этой функции:

function numericOverride(val){
        console.log('hello');
}

Когда я пытаюсь сделать следующее:

el.onchange = function() { numericOverride(this) } 

Ничего не добавляется в div, и я не получаю результата от функции.

Ответы [ 4 ]

2 голосов
/ 11 августа 2011

Попробуйте (кросс-браузер):

function keyPressHandler() { alert("Hi"); };

if (el.addEventListener) {
   el.addEventListener("keypress", keyPressHandler, true);
}
else if (el.attachEvent) {
   el.attachEvent("onkeypress", keyPressHandler);
}
else {
   el.onkeypress = keyPressHandler;
}

Демо (обратите внимание, что jsfiddle не очень хорошо играет в IE 7): http://jsfiddle.net/mrchief/BQxWp/2/

Проверено в Chrome, FF5, IE7 (после повторной попытки пару раз) и IE9.

2 голосов
/ 11 августа 2011

К какому типу элементов вы пытаетесь присоединить обработчик событий? Событие onkeypress поддерживается только следующими тегами:

<a>, <acronym>, <address>, <area>, <b>, <bdo>, <big>, <blockquote>, <body>, <button>,
<caption>, <cite>, <code>, <dd>, <del>, <dfn>, <div>, <dt>, <em>, <fieldset>, <form>,
<h1> to <h6>, <hr>, <i>, <input>, <kbd>, <label>, <legend>, <li>, <map>, <object>, <ol>,
<p>, <pre>, <q>, <samp>, <select>, <small>, <span>, <strong>, <sub>, <sup>, <table>,
<tbody>, <td>, <textarea>, <tfoot>, <th>, <thead>, <tr>, <tt>, <ul>, <var>

http://www.w3schools.com/jsref/event_onkeypress.asp

1 голос
/ 11 августа 2011

Рассматривали ли вы использование прослушивателей событий ?

target.addEventListener("click", function() { alert("Hi"); })

1 голос
/ 11 августа 2011

Вы должны правильно настроить прослушиватель событий:

el.onkeypress = function() { alert("HI") }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...