2010-12-08 8 views
0

Я хочу добавить обработчик событий для элементов ввода текста. Элементы управления генерируются динамически. Мой код, как:Не удалось установить обработчик событий в javascript

JavaScript:

var settings_check = new Array("checkVMName()","checkDiskMB()","checkMemMB()","checkEsx()","checkDatastore()"); 
... 
_inputbox = document.createElement("input"); 
_inputbox.type = "text"; 
_inputbox.id = settings[zindex]; 
_inputbox.onblur = settings_check[zindex]; 

_hint = document.createElement("hint"); 
_hint.id = settings[zindex] + "_Label2"; 
_hint.innerText = settings_hint[zindex]; 

mycurrent_cel2.appendChild(_inputbox); 
mycurrent_cel2.appendChild(_hint); 

Но этот способ не работает. Я проверил HTML-код Firebug и атрибут «onblur» для ввода текста вообще.

HTML

<tr> 
    <td>....</td> 
    <td><input type="text" id="Datastore"> 
     <hint id="Datastore_Label2">start with /</hint> 
    </td> 
</tr> 

Я также пробовал другие способы установки обработчика событий, как

_inputbox.onblur = function(){alert("test");}; 

или

_inputbox.setAttribute("onblur",func); 

Ne он работает. :(

Если я вручную добавлю onblur = function() {...} для ввода текстового элемента управления в HTML с Firebug и выполним, onblur действительно работает. Поэтому возникает вопрос: как я могу установить обработчик событий для управления в JavaScript? есть ли что-нибудь неправильно в моем коде? Спасибо.

ответ

2

Вы создаете массив строк с функцией вызовов в них, это совершенно неправильно.

Вы должны назначить ссылки к функции, которые вы хотите вызвать при срабатывании события. Вы сделали бы это, просто сохранив имена функций (без () или кавычек) в своем массиве, и это будет ULD работы (функции должны быть предварительно определены в текущей области, а):

var settings_check = [checkVMName, checkDiskMB, checkMemMB, checkEsx, checkDatastore]; 

Так, в сущности, settings_check это просто массив ссылок функций.

См. Это jsFiddle example, иллюстрации этой концепции.

+0

Спасибо, Джейкоб. Я считаю, что вы правы, даже я не пробовал ваше предложение, потому что код находится на моем домашнем ПК, и меня сейчас нет дома. Когда я попробую, я дам вам знать. Еще раз спасибо! – Landy 2010-12-08 01:50:43

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