Javascript发布到表单-won'如果字段是隐藏的,则不起作用
Javascript posting to form - won't work if field is hidden
我阅读了关于一个类似问题的建议,并遵循了它。我将一个值从javascript发布到一个表单,以传递给PHP。问题是,如果我将值传递给一个文本区域字段,而不是一个隐藏字段,那么一切都会很完美。
HTML
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js" ></script>
<script src="updatepage.js"></script>
<head>
<body onload="loadbio()">
<form action="http://localhost/restricted/update.php" method="POST">
<input type="hidden" id="hiddenbio" name="oldbio"> <!-- Hidden to pass to PHP -->
Biography: <br /><textarea id="bio" rows="8" cols="60" name="newbio"></textarea>
<br /><br />
<input type="submit" value="Submit">
</form>
</body>
</html>
JS-
function loadbio () {
$("#bio").load('randomperson.html #biobox p')
setTimeout (function () {
var biotopass = $("#bio").val();
$.post("biochange.html", { oldbio: biotopass });
}, 200);
}
PHP
<html>
<body>
Old Bio: <?php echo $_POST["oldbio"]; ?><br />
New Bio: <?php echo $_POST["newbio"]; ?><br />
</body>
</html>
因此loadbio()会从文件中取出旧的传记并将其发布到biochange.html。html会在用户更改传记的文本区域中显示旧传记。
这就是问题所在,我需要在旧值更改之前存储它的值。如果我将隐藏的输入更改为文本区域,它将在PHP中得到响应。如果我把它藏起来,它就不会得到回应。
我注意到两件事:
- 您的
<input type="hidden" id="hiddenbio" name="oldbio">
没有value
属性 - 使用这行
var biotopass = $("#bio").val();
,您实际上只是获取新的个人简历并将其发送到服务器,而忽略旧的个人简历
所以你没有发送任何东西,即使你发送了,也不会有任何东西可以发送。所以,一旦你给你的隐藏输入一个值,你所需要做的就是发送它。实际上,有一个巧妙的技巧可以发送表单的所有元素(因此,如果您更改HTML,并且它自动类似于表单的正常发送方式,则不必更新JS),将AJAX调用更改为:
$.ajax({
type: "POST",
url: "biochange.html",
data: $(form).serialize()
})
问题是.load
将数据加载到元素的.innerHTML
中。对于<textarea>
元素,.innerHTML
是以表单形式提交的数据,其中作为<input>
,value
属性是以表单方式提交的数据。
这就解释了为什么它能用<textarea>
而不能用<input>
。
要修复此问题,请使用.get
而不是.load
:
$.get("randomperson.html #biobox p", function(x){
$("#oldbio, #newbio").val(x);
});
您的"#oldbio"隐藏在何处
您没有发布newbio
。在行中:
$.post("biochange.html", { oldbio: biotopass });
}, 200);
您指定您只想发布oldbio
。只需将其调整为这样的内容:
function loadbio () {
$("#bio").load('randomperson.html #biobox p')
setTimeout (function () {
var biotopass = $("#bio").val();
var hiddenbio = $("#hiddenbio").val();
$.post("biochange.html", { oldbio: hiddenbio, newbio: biotopass });
}, 200);
}
相关文章:
- JavaScript 检查隐藏字段中的值并将其设置为隐藏字段值
- 带有验证和隐藏字段值的提交按钮
- 主干窗体隐藏字段未呈现
- 清除以前的$_GET值或不获取仅隐藏字段的值
- 添加和删除隐藏字段数组中的值,而不提交表单
- 在控制器上使用“$watch”时,为什么不更新此隐藏字段
- 将选项值附加到隐藏字段
- JQuery获取隐藏字段的值
- MVC+访问控制器中的隐藏字段
- ASP.net Javascript函数中的隐藏字段为null
- 在第一页加载时隐藏字段,而不是在php发布之后
- 表单使用js、html,而不是隐藏字段
- 如何根据文本长度立即显示和隐藏字段?-JQuery
- 在选择更改时显示大于/小于的隐藏字段集
- 如何获取多个复选框值并分配给隐藏字段
- 将会话登录页存储在cookie中以进行表单解析(通过隐藏字段)
- 将布尔值存储在隐藏字段中以进行表单处理
- 如何将多个/不同的隐藏字段插入 XML
- 如何通过 JSP 代码将隐藏字段(Javascript)插入 XML
- 如何使用Java在Selenium WebDriver的隐藏字段中键入一些文本