2013-12-05 2 views
2

У меня есть странный вопрос с этой очень небольшой код:Javascript: ошибка, объект не является функцией

function autre(element) 
{ 
    if (element.value=="autre") 
    { 
     var inputText=document.createElement("input"); 
     inputText.setAttribute("type", "text"); 
     inputText.setAttribute("name", "autre"); 
     inputText.setAttribute("required", ""); 
     element.parentNode.appendChild(inputText);  
    } 
    else element.parentNode.removeChild(element.nextSibling); 
} 

и HTML

<select name="matiere" onchange="autre(this);"> 
    <option value="autre">Autre</option> 
    <option value="...">Some others options</option> 
</select> 

Wich создать входной текст, когда значение «Autre» выбора. Это хорошо работает. Но когда я снова меняю значение, я получаю странную ошибку: объект не является функцией.

Любая идея? ..

Редактировать: Проблема была в том, что ceakki упоминает имя функции. Благодаря! Спасибо всем за вашу помощь

+1

Я не вижу ничего плохого в этом коде. Можете ли вы рассказать нам, в какой строке это происходит? – Halcyon

+0

Протестировано на FF и Chrome и не возникает ошибок, продолжает добавлять и удалять входы. – Tobiasz

ответ

2

Изменение имени в Autre() функции или нового созданного элемента < ввод name = "autre" .../>.

Кажется, что IE9 добавляет имя AUTRE из < ввода имени = «Autre» .../> к текущему объекту Window (или глобальному объекту).

В этом случае autre ссылается на новый созданный элемент, а не на вашу функцию.

1

Этот сценарий работает хорошо для меня http://jsfiddle.net/J7acJ/

Просто добавил EventListener

document.querySelector("select").addEventListener('change', function(){ 
    autre(this); 
}) 
+1

Этот код не будет работать в старых версиях IE. Кроме того, его ошибка связана с тем, что window.autre заменяется новым созданным элементом с именем «autre». Вот почему ошибка говорит: объект не является функцией. –

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