我有一张SVG地图。当有人点击状态时说“堪萨斯”它会显示一个表单并填充状态选择框,其中显示点击的状态,比如堪萨斯州。代码 - 这样可以正常工作。此代码在头部。
var itemval= '<option value="'+data.name+'">'+ stateData[data.name].fullName+'</option>';
$("#SelItem").html(itemval);
当提交表单并将其回发到同一页面时,我正在使用
<form method="POST" action="theform.php" onsubmit="return validateForm(this);">
当页面回到同一页面时,选择框为空。选择框在那里,但没有选项。
我在谷歌搜索过我发现下面的代码加上一些类似的方法,但它们不起作用。我已经在头部和选择下使用了这段代码,但没有运气。
var selectedVal = $("#SelItem").val();
$("#SelItem").val(selectedVal);
**HTML**
<select id="SelItem"><option></option></select>
我一直在努力工作几个小时,但似乎无法找到解决方案。
有人可以告诉我如何在提交表单后保留选择值并返回到同一页面吗?
答案 0 :(得分:1)
当页面加载时,您需要检查是否存在已发布的值,如果有,则将php值传递给javascript代码以填充select选项,或者直接在html中使用它创建选择选项。
首先,您应该在html中选择一个名称属性,以便将值传递到php中的$ _POST数组:
<select id="SelItem" name="SelItem">
以下是一种可以在javascript中填充它的方法(注意此代码依赖于var stateData
在同一范围内):
$(document).ready(function(){
<?php if (!empty($_POST['SelItem'])): ?>
var posted_state = '<?php echo $_POST['SelItem'];?>';
if (stateData[posted_state] !== undefined) {
var itemval= '<option value="'+posted_state+'" selected>'+ stateData[posted_state].fullName+'</option>';
$("#SelItem").html(itemval);
}
<?php endif; ?>
});
编辑:上面的替代方法是将它放在select标签的html中:
<select id="SelItem" name="SelItem">
<?php if (!empty($_POST['SelItem'])): ?>
<option value="<?php echo $_POST['SelItem'];?>" selected>
<?php echo $_POST['SelItem']; // this would be better if you can replace it with fullname ?>
</option>
<?php else: ?>
<option></option>
<?php endif; ?>
</select>
注意这个方法在编写时有几个问题。首先,此示例中的选项文本不是州名,而是缩写。接下来,您不应该信任$_POST
的内容,因为恶意用户可以轻松地将其更改为您不想要的值。最好验证处理帖子的PHP代码中$_POST['SelItem']
的值,以确保它在使用之前确实是其中一个正确的值。这就是为什么在上一个示例中,我在尝试将值添加到您的选择之前进行了检查if (stateData[posted_state] !== undefined)
。
编辑:
要从php提供状态fullname,你需要在php端定义一个状态数组(我只在你的javascript代码中看到它是客户端)。
所以在PHP中如果你有类似的东西:
$states = array(
'AK' => 'Alaska',
'AL' => 'Alabama',
// etc...
);
然后,您可以使用已发布的州名缩写来获取全名:
if (array_key_exists($_POST['SelItem'], $states))
$fullname = $states[$_POST['SelItem']];