我有一个表单,该表单提交给运行某些验证的第三方服务。出错时,它会重定向到与表单相同的页面,但会附加一个包含原始表单值的查询字符串以及错误消息。
由于此查询字符串,浏览器将其视为"新页面",并且表单为空。
我尝试了一种使用 PHP 的方法(请参阅代码审查问题),该方法归结为:"单独获取每个字段的 GET 值,然后将其设置为表单上的值。它有点工作,但是:
- 单选按钮很难处理
- 我没有完整的 PHP 功能。我在WordPress中使用了一个PHP页面插件,该插件可以运行某些PHP,但是在定义函数然后重用它时感到窒息
推荐的方法是什么(PHP或JavaScript...而且我在网站上也有jQuery)用于重新填充此表单?
Javascript,因为PHP强制在服务器上增加额外的负载。但是验证用户输入应该在客户端(JS)和(服务器端)PHP中完成。
除非你动态地组合你的字段,否则使用 PHP 动态地重新填充它们并不容易。如果是,您可以执行以下操作:
.PHP
$fields = [
'username' => ['type' => 'text', 'value' => $_GET['username']],
'setting1' => ['type' => 'radio', 'value' => $_GET['radio']]
];
foreach( $fields as $name => $input ) {
echo "<input type='{$input['type']}' name='{$name}' value='{$input['value']}'>";
}
如果没有,你可以像这样使用 PHP 和 JavaScript 的组合。我正在使用jQuery来简化事情。
PHP 和 JavaScript
$fields = $_GET;
echo '<script type="text/javascript">
var errors = { ';
foreach( $fields as $name => $value ) {
echo $name . " : '{$value}',n";
}
echo '};
$.each(errors, function(name, value) {
$("input[name="+name+"]").val(value);
});
</script>';
这是未经测试的,我知道至少有一个错误(错误数组中额外的逗号),但应该是一个很好的起点。第二种方法的目标是使用 PHP 组装一个数组,然后 JavaScript 可以使用该数组并执行一个循环将这些值分配给每个输入字段。但同样 - 选择框和单选按钮等的逻辑会很复杂。您不仅要分配val
,还必须设置checked
属性等。
是否有任何库或jQuery插件已经这样做了。
这是用于检查单选按钮的 jquery 代码:
$("form :radio:checked").before("CHECKED"); //selects only checked buttons
这是阻止表单提交并重新填充字段的代码:
function prepareEventhandlers() {
document.getElementById("formname").onsubmit = function() {
if (document.getElementById("email").value == "") { // e.g. if no email was given
document.getElementById("errormessage").innerHTML = "it didnt work!";
return false;
} else {
document.getElementById("errormessage").innerHTML = "";
return true;
}
};
}
window.onload = function () {
prepareEventhandlers();
}
祝你好运!