2011-01-06 13 views
5

Considere el siguiente formulario sencillo:Javascript campo de formulario HTML/problema de nombres de

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

envío de formulario se realiza mediante Javascript (IIU) en una llamada AJAX. Todos los campos se recopilan correctamente a partir del formulario. Entonces, Javascript desea enviar la llamada ajax al "form.action".

Aquí es donde comienza mi problema. El objeto formulario es del tipo HTMLFormElement. La propiedad de acción del formulario se supone que es de tipo cadena y debe contener "handle.php". Después de algunas horas de depuración, noté que form.action ahora es de tipo HTMLInputElement.

Mi pregunta es: ¿Es esto correcto el comportamiento de Javascript? Nunca hubiera pensado que definir un campo de formulario con el nombre de un atributo de formulario, esto sucedería. Mientras tanto, resolví el problema nombrando mi campo de manera diferente.

Gracias de antemano por cualquier consejo ...


encontrado una manera fácil de mostrar mi problema. En primer lugar la forma con el problema:

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

Y la forma que le es propia:

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

En la primera, los estados emergentes "[HTMLInputElement objeto]", en el segundo: "http://localhost/test.php ".

+0

¿Podría agregar también el código de Javascript – sunn0

+0

? No sé si es correcto para JS, pero parece que está en la forma que describió, ¿es ese el gran problema para cambiar el nombre de la entrada de la acción por otro nombre? – Chris

+0

@Chris: obviamente ya lo resolví cambiando el nombre de mi campo. Pero el problema persiste al publicar formularios usando javascript en llamadas ajax. Los campos de formulario no pueden tener el mismo nombre que los atributos de formulario. – djBo

Respuesta

3

La cuestión que se está viendo es porque las formas son especiales en JavaScript. Todos sus campos son accesibles como propiedades, por lo que cuando usa this.form.action, obtiene la acción campo, no el atributo HTML action="test.php".

Intente cambiar alert(this.form.action); por en su lugar.

+0

/Matthew: getAttribute parece funcionar. No proporciona una URL completa como esta. Form.action sí, pero afortunadamente ajax no le importa demasiado. – djBo

0

Parece un error. Tal vez no debería haber una serie de 'acción'

<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> 
+0

Esto no funcionará. – Matt

+0

@Matt: Sí, su propuesta de solución tendría que incluirse en el Javascript. – Chris

0

su this.form.action sigue siendo un objeto. en lugar de usar alert póngalo en un console.log(this.form.action) y use firebug y firequery para descubrir qué eventos/propiedades tiene su this.form.action.

! Lo que necesita para que su consola de Firebug antes de poder utilizar console.log

Cuestiones relacionadas