Проблема с именами полей формы Javascript / HTML - PullRequest
5 голосов
/ 06 января 2011

Рассмотрим следующую простую форму:

<form method="GET" action="handle.php">
  <input type="hidden" name="action" value="search">
</form>

Отправка формы выполняется Javascript (iui) в вызове ajax.Все поля правильно собраны из формы.Затем Javascript хочет отправить вызов ajax на « form.action ».

Вот где начинается моя проблема.Объект форма имеет тип HTMLFormElement.Предполагается, что свойство action формы имеет тип string и должно содержать "handle.php".После нескольких часов отладки я заметил, что form.action теперь имеет тип HTMLInputElement.

Мой вопрос: это правильное поведение Javascript?Я бы никогда не подумал, что при определении поля формы с именем атрибута формы это произойдет.Тем временем я решил проблему, назвав свое поле по-другому.

Заранее благодарен за любой совет ...


Найден простой способ отобразить мою проблему.Сначала форма с проблемой:

<form action="test.php">
    <input type="hidden" name="action" value="test">
    <input type="button" onclick="alert(this.form.action);">
</form>

И правильная форма:

<form action="test.php">
    <input type="hidden" name="NOT_AN_ATTRIBUTE_NAME" value="test">
    <input type="button" onclick="alert(this.form.action);">
</form>

В первом всплывающее окно сообщает «[object HTMLInputElement]», во втором:«http://localhost/test.php".

Ответы [ 3 ]

3 голосов
/ 06 января 2011

Проблема, которую вы видите, заключается в том, что формы являются особенными в JavaScript.Все их поля доступны как свойства, поэтому при использовании this.form.action он получает действие field , а не атрибут HTML action="test.php".

Попробуйте изменить alert(this.form.action); на alert(this.form.getAttribute('action')) вместо.

0 голосов
/ 06 января 2011

ваш this.form.action все еще является объектом.вместо использования alert поместите его в console.log(this.form.action) и используйте firebug и firequery, попробуйте выяснить, какие события / свойства имеет this.form.action.

! вам необходимо включить консоль в firebug, прежде чем вы сможете использоватьconsole.log

0 голосов
/ 06 января 2011

Кажется, как ошибка.Может быть, должен быть массив для «действия»

<form action="test.php">
    <input type="hidden" name="action" value="test">
    <input type="button" onclick="alert(this.form.action[0]);"> //the form action
    <input type="button" onclick="alert(this.form.action[1]);"> // the text input 
</form>
...