我有一个PHP脚本,旨在允许用户决定页面显示的语言。信息存储在cookie中,然后在需要时读取以显示正确的内容。
目前,我使用HTML下拉框允许用户选择语言,然后他们必须按表单提交按钮来设置cookie。 如何在下拉菜单中选择语言时自动选择并提交表单?我希望您能理解我的问题。
我目前的PHP代码是:
<?php
$user_lang = null;
if (isset($_POST["setc"])) {
$expire = time() + 60 * 60 * 24 * 30;
setcookie("mycookie", $_POST["sel"], $expire);
header("location: " . $_SERVER["PHP_SELF"]);
} else if (isset($_COOKIE["mycookie"])) {
$user_lang = $_COOKIE["mycookie"];
}
?>
<meta charset='utf-8'>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<select name="sel" size="1">
<option value="en"<?php echo (!is_null($user_lang) && $user_lang === "en" ? " selected" : ""); ?>>English</option>
<option value="es"<?php echo (!is_null($user_lang) && $user_lang === "es" ? " selected" : ""); ?>>Español</option>
<option value="fr"<?php echo (!is_null($user_lang) && $user_lang === "fr" ? " selected" : ""); ?>>Français</option>
<option value="de"<?php echo (!is_null($user_lang) && $user_lang === "de" ? " selected" : ""); ?>>Deutsch</option>
</select>
<input name="setc" value="save setting" type="submit">
</form>
答案 0 :(得分:4)
将您的选择标记更改为:
<select name="sel" size="1" onchange="this.form.submit();">
在用户选择语言时提交表单。
如果您希望在没有JavaScript的情况下执行此操作,则可以使用多个提交按钮方法:
<input name="set_language[en]" value="English" type="submit">
<input name="set_language[es]" value="Español" type="submit">
<input name="set_language[fr]" value="Français" type="submit">
<input name="set_language[de]" value="Deutsch" type="submit">
处理此表单非常简单:
if (isset($_POST["set_language"])) {
$language = key($_POST["set_language"]);
// $language contains user-selected language code now
}
使用select字段但不使用JavaScript或任何其他客户端脚本语言无法完成此操作。
答案 1 :(得分:3)
您需要使用JavaScript:
<select name="sel" size="1" onchange="this.form.submit();">
或者如果你使用jQuery:
$("select[name='sel']").change(function() {
$(this).parent().submit();
});
只要用户在下拉列表中更改值,就会提交表单。
答案 2 :(得分:2)
您可以在选择中添加onchange事件:
<select onChange="document.forms[0].submit();">
请记住,为没有启用javascript的用户保留提交按钮是一件好事。你可以使用javascript隐藏按钮,这样就不会混淆那些有常规浏览器的窗口。
答案 3 :(得分:2)
我认为你必须像其他人一样使用javascript,但如果用户没有激活javascript,你也可以使用提交按钮作为备份:
<noscript><input value="save setting" type="submit"></noscript>
然后,由于提交按钮只会在用户禁用javascript时显示,因此您需要添加一个隐藏的输入来检查表单是否已在服务器端提交
<input type="hidden" name="setc" value="true" />
答案 4 :(得分:1)
答案是JavaScript而不是PHP。你可以用这样的方式不引人注意地做到这一点:
<script>
window.onload = function() {
document.getElementById("idOfDropDown").addEventListener("change", function() {
document.forms["formName"].submit();
});
}
</script>