Не работает простой скрипт (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, время: 10:35. |