考虑以下简单形式:
<form method="GET" action="handle.php">
<input type="hidden" name="action" value="search">
</form>
表单提交由 Javascript (iui) 在 ajax 调用中执行。所有字段都从表单中正确收集。然后 Javascript 想要将 ajax 调用发送到“form.action”。
这是我的问题开始的地方。对象 form 是 HTMLFormElement 类型。表单的action 属性应该是字符串类型并且应该包含“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”。
最佳答案
您遇到的问题是因为表单在 JavaScript 中很特殊。它们的所有字段都可以作为属性访问,因此当您使用 this.form.action
时,它会获取 field 操作,而不是 HTML 属性 action="test. php"
.
尝试将 alert(this.form.action);
改为 alert(this.form.getAttribute('action'))
。
关于php - Javascript/HTML 表单字段命名问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4615520/