Не работает простой скрипт (Uncaught TypeError: object is not a function)
function newManufacturer() { var form = document.getElementById('newManufacturer'); var form2 = document.getElementById('chooseManufacturer'); if(form.innerHTML=='') { form.innerHTML='<br><input name="newManufacturer" type="text">'; form2.disabled='true'; } else { form.innerHTML=''; form2.disabled=''; } Первый раз когда нажимается кнопка выполняется функция срабатывает, второй раз нет - google chrome пишет "Uncaught TypeError: object is not a function". Код соответствующий <select name="m_id" id="chooseManufacturer"> <input type="button" onClick="newManufacturer()" value="Новый" style="margin-left:20;"> <div id="newManufacturer"></div> В чем проблема? |
Где у функции закрывающая фигурная скобка } а у селекта закрывающий тег </select> ?
|
Проблема в IE? Скорее всего из-за того, что есть глобальная функция newManufacturer и одноименный идентификатор элемента. Сначала создается функция, а потом она перезаписывается ссылкой на DOM-элемент, вот к нему вы и обращаетесь, и он is not a function…
|
По совету Octane поменял имя, все заработало. Потребовалось сделать еще одно изменение в скрипт. Суть вообще всего скрипта проста: по нажатии появляется форма для ввода текста, повторным нажатием скрывается. При этом при появлении/скрытии введенный текст в поле не должен исчезать, а должен сохраняться (а то вдруг случайно нажали). При этом еще один выпадающий список делается нерабочим/рабочим - конкретно тут проблемы нет.
function addManufacturer() { form = document.getElementById('newManufacturerDivTag'); form2 = document.getElementById('chooseManufacturer'); form3 = document.getElementById('newManufacturerInputTag'); var inputPrevious; if(form.innerHTML=='') { if(inputPrevious.length>0) form.innerHTML='<input name="newManufacturerName" id="newManufacturerInputTag" type="text" value="'+inputPrevious+'">'; else form.innerHTML='<br><input name="newManufacturerName" id="newManufacturerInputTag" type="text">'; form2.disabled='true'; } else { inputPrevious = form3.value; form.innerHTML=''; form2.disabled=''; } } <select name="m_id" id="chooseManufacturer"> ... <div id="newManufacturerDivTag"><br><input name="newManufacturerName" id="newManufacturerInputTag" type="text" value=""></div> Вот такой код не работает, у меня ощущение что переменная inputPrevious после выполнения функции получает значение, но не сохраняется, и поэтому условие if(inputPrevious.length>0) показывает ошибку. А вот почему так происходит? Вроде она локальная для функции, должна сохраняться. |
Народ, подскажите, скрипт то маленький совсем и всего про одну ошибку спрашиваю.
|
Цитата:
|
Цитата:
Поэтому следующее вхождение if(inputPrevious.length > 0) ...не есть гут, ИМХО. Я бы предпочёл сразу написать var inputPrevious = "";так и тип определён и значение проставлено корректное. добавлено позже: понял, что выступил не по делу. СТЫДНО... |
Цитата:
В общем, подсказать никто не хочет. Будут делать с костылями через display:none для формы и прописывать/убирать через innerHTML флаг-переменную определяющую учитывать/не учитывать содержимое этой скрываемой формы... Цитата:
|
Вы, наверное, пытались сотворить чего-то вроде этого:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <script type="text/javascript"> function addNewManufacturer(){ var inp = document.createElement('INPUT') inp.type = "text" var but = document.createElement('INPUT') but.type="button" but.value="Add" var node = document.getElementById('selDIV') but.onclick=function(event){ var opt = document.createElement('OPTION') opt.value = inp.value opt.innerHTML = inp.value var sel = node.getElementsByTagName('SELECT')[0] sel.appendChild(opt) node.removeChild(but) node.removeChild(inp) sel.selectedIndex = 0 } node.appendChild(inp) node.appendChild(but) } </script> </head> <body> <div id="selDIV"> <select name="chooseManufacturer" id="m_id" onchange="if(this.selectedIndex == 1)addNewManufacturer()"> <option selected disabled>... choose the manufacturer ...</option> <option >... enter new one ...</option> </select> </div> </body> </html> ЗЫ у меня (WInXP) работает в 5 браузерах |
Да, по замыслу похоже, но реализация для моих условий менее удобная.
|
Часовой пояс GMT +3, время: 13:48. |