在提交表单之前强制更改隐藏字段的值
Forcing a change in the value of the hidden field before submitting a form
我试图改变JavaScript提交时隐藏字段的值。在我的页面上有两个按钮,一个用于返回主页(index.php
),另一个用于返回数据输入的第一页(addData.php
)。我试图使用id "goHome"
的隐藏字段来控制路由。我的代码是这样的:
HTML(仅限表单)
<form name = "addDataReal" id = "addDataReal" method = "POST" action = "addDataProc.php" onsubmit="return checkNSub()">
<!-- Other items -->
<input type = "submit" name = "submitBtnF" id = "submitBtnF" class="shortText" style = "width: 120px;" value = "Submit + Home" onclick = "return getGoValue(true)"/>
<input type = "submit" name = "submitBtnR" id = "submitBtnT" class="shortText" style = "width: 120px;" value = "Submit + Next" onclick = "return getGoValue(false)"/>
<input type = "hidden" name = "goHome" id = "goHome" value = "" />
</div>
</form>
Javascript function checkNSub() {
//form validation functions
//OK then return true
//Not then return false
}
function getGoValue(goHome) {
if (goHome) {
document.getElementById("goHome").value = "true";
} else {
document.getElementById("goHome").value = "false";
}
return true;
}
在此之前,我尝试了许多其他版本,并参考了以下几个问题:
设置表单隐藏值
在提交前设置表单变量值
如何在提交
之前更改隐藏输入字段的值但是这些方法都不适合我。
对于实际目的有一个变通办法,但我想知道,如果我想保持这两个按钮,我的代码应该如何修改,以便"goHome"
的值可以在表单提交之前改变?经过多次尝试,我仍然得到$_POST["goHome"] = ""
。
另外,为什么在实际更改值之前提交表单,而将代码放在此之前?
谢谢!
这是一个老问题,但我想如果有人还在寻找答案,这里是
你可以试试jquery $('input[name="goHome"]').val('true');
或JS - document.getElementByName("goHome").value = "true";
在提交时更新任何值使用名称选择器而不是ID,这将节省您一些时间:)
当我们试图在提交表单时更改隐藏字段的值时,它不会更新值,因为DOM已经从输入参数中分离了ID,但是name仍然存在,因为name将在表单中传递。
如果有人发现这很有用,他们不必为一个简单的解决方案工作很多小时:)
Happy Coding:)
有多种方法可以实现。首先,请记住,您在<form>
中使用type="submit"
<input>
,这意味着无论是否发生onclick事件,它们都将自动提交表单。
一种更少干扰(对你的代码)的方法是:
从表单中取出提交输入,像这样:
示例:
<form name = "addDataReal" id = "addDataReal" method = "POST" action = "whatever.php">
<!-- Other items -->
<input type = "hidden" name = "goHome" id = "goHome" value = "" />
</div>
</form>
<input type = "submit" name = "submitBtnF" id = "submitBtnF" class="shortText" style = "width: 120px;" value = "Submit + Home" onclick = "return getGoValue(true)"/>
<input type = "submit" name = "submitBtnR" id = "submitBtnT" class="shortText" style = "width: 120px;" value = "Submit + Next" onclick = "return getGoValue(false)"/>
像这样改变getGoValue()
和checkNSub()
函数:
function checkNSub() {
//form validation functions
//OK then return true
//Not then return false
var myForm = document.getElementById('addDataReal');
myForm.submit();
}
function getGoValue(goHome) {
if (goHome) {
document.getElementById("goHome").value = "true";
console.log(document.getElementById("goHome").value);
checkNSub();
} else {
document.getElementById("goHome").value = "false";
console.log(document.getElementById("goHome").value);
checkNSub();
}
return true;
}
试一下。
p。S:一对console.logs
,以便您可以检查值的更改。注释掉checkNSub();
以便在控制台中看到它们。然而,请记住,您正在发布一个表单,这意味着您将从服务器加载一个新页面,这个新页面将与您的"goHome"值无关。"goHome"值仅在您处于同一页面时存在。在"重新创建"DOM的那一刻,您将失去它。
注:2:
- 你的
getGoValue();
里面的return true;
是不需要在我的的例子。您可以删除它。 - 您的
onclick = "return getGoValue(true)"
中的return
也是不需要,可以删除
注:3 :此回复的重点是保持大部分代码的完整。在现实中,现在你有你的inputs
外的形式,没有必要为他们的type="submit"
,你应该改变他们的<button>
与onClick
事件(或Listeners
)。
- JavaScript 检查隐藏字段中的值并将其设置为隐藏字段值
- 带有验证和隐藏字段值的提交按钮
- 主干窗体隐藏字段未呈现
- 清除以前的$_GET值或不获取仅隐藏字段的值
- 添加和删除隐藏字段数组中的值,而不提交表单
- 在控制器上使用“$watch”时,为什么不更新此隐藏字段
- 将选项值附加到隐藏字段
- JQuery获取隐藏字段的值
- MVC+访问控制器中的隐藏字段
- ASP.net Javascript函数中的隐藏字段为null
- 在第一页加载时隐藏字段,而不是在php发布之后
- 表单使用js、html,而不是隐藏字段
- 如何根据文本长度立即显示和隐藏字段?-JQuery
- 在选择更改时显示大于/小于的隐藏字段集
- 如何获取多个复选框值并分配给隐藏字段
- 将会话登录页存储在cookie中以进行表单解析(通过隐藏字段)
- 将布尔值存储在隐藏字段中以进行表单处理
- 如何将多个/不同的隐藏字段插入 XML
- 如何通过 JSP 代码将隐藏字段(Javascript)插入 XML
- 如何使用Java在Selenium WebDriver的隐藏字段中键入一些文本