JQuery填充选择框但在帖子选项消失后

时间:2015-05-30 21:58:33

标签: javascript php jquery html svg

我有一张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>

我一直在努力工作几个小时,但似乎无法找到解决方案。

有人可以告诉我如何在提交表单后保留选择值并返回到同一页面吗?

1 个答案:

答案 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']];