2012-02-28 3 views
1

Возьмем следующий код:Binding представить обработчик для формирования в JQuery 1.7.1 возвращает ошибку

$("#docUploadForm").on("submit", function(event) { 
    event.preventDefault(); 
}); 

достаточно простого до сих пор, не так ли? Связывание инициируется внутри метода init(), который запускается на $(document).ready().

Chrome жалуется на линии, которая связывает представить: Uncaught TypeError: Object #<HTMLInputElement> has no method 'toLowerCase'

ошибка брошена приходит из ядра JQuery. Если кому-то интересно, соответствующий вызов находится по строке 1853 в jquery-1.7.1.js: var match = jQuery.noData[ elem.nodeName.toLowerCase() ];

Итак, что мне нужно для решения этой проблемы?

Firebug в Firefox 9 жалуется на ту же проблему. Таким образом, это не проблема с реализацией браузера.

+0

Ммм, странно, что это влияет только на Chrome. Убедитесь, что ваши HTML-теги правильно вложены и сбалансированы. –

+0

Я только что обновил вопрос, чтобы отразить, что Firefox 9 тоже жалуется на это. – creanium

+0

странно ... может попробовать использовать метод submit() вместо on() – charlietfl

ответ

6

Обнаружили проблему.

Это для внутреннего веб-приложения, в котором используется репозиторий контента Java. В JCR объекты называются узлами, поэтому мы ссылаемся на объект с использованием Node Names.

В моей форме у меня был скрытый ввод с идентификатором nodeName, который, по-видимому, вызывал конфликт с jQuery. Строка, которая была ошибкой в ​​jQuery, вызывала elem.nodeName, которая возвращала скрытый ввод вместо имени узла DOM, который он ожидал.

Итак, извлеченный урок: не давайте элементу формы идентификатор «nodeName», jQuery ему не нравится.

См. this Fiddle для демонстрации.

+1

Это не проблема jQuery, а DOM. Любое имя свойств DOM0 не может быть легко использовано для имени элемента формы. DOMLint может помочь найти эти проблемы: http://kangax.github.com/domlint/ –

+0

Спасибо, Дейв! Раньше я думал, что у меня есть твердое понимание DOM, но я думаю, что я не так хорош, как я думал (история жизни разработчика, верно?) Я добавил DOMLint в свой инструментарий и проведу аудит всех моих страниц против него. – creanium

+0

Yeeeech, еще один класс ложных ключевых слов, о которых я не знал. –

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