HTML Select,通过Ajax返回的选项,未选择应该选择的项目

时间:2018-01-27 00:28:44

标签: javascript php ajax

这是一个奇怪的。在其他人和示例代码等的帮助下,我将一个例程放在一起,基于一个选择,通过ajax,将值传递给php文件,然后使用选项构建第二个选择,每个选项都有代码设置为检查变量的值并设置所选属性。以下是带有选项的返回select语句的示例:

<select class='form-control' id='branch' name='branch'>
   <option value = '' selected></option>
   <option value="Caldarium"<?php if( $branch=="Caldarium" ) echo ' selected' ?>Caldarium</option>
   <option value="Cloondara"<?php if( $branch=="Cloondara" ) echo ' selected' ?>Cloondara</option>
   <option value="Crosston"<?php if( $branch=="Crosston" ) echo ' selected' ?>Crosston</option>
   <option value="Darkwood"<?php if( $branch=="Darkwood" ) echo ' selected' ?>Darkwood</option>
   <option value="Darkwood - Caer Darth"<?php if( $branch=="Darkwood - Caer Darth" ) echo ' selected' ?>Darkwood - Caer Darth</option>
   <option value="Darkwood - Hawks Haven"<?php if( $branch=="Darkwood - Hawks Haven" ) echo ' selected' ?>Darkwood - Hawks Haven</option>
   <option value="Darkwood - Konigstadt"<?php if( $branch=="Darkwood - Konigstadt" ) echo ' selected' ?>Darkwood - Konigstadt</option>
   <option value="Darkwood - Montaigne du Roi"<?php if( $branch=="Darkwood - Montaigne du Roi" ) echo ' selected' ?>Darkwood - Montaigne du Roi</option>
   <option value="Darkwood - St. David's"<?php if( $branch=="Darkwood - St. David's" ) echo ' selected' ?>Darkwood - St. David's</option>
   <option value="Esfenn"<?php if( $branch=="Esfenn" ) echo ' selected' ?>Esfenn</option>
   <option value="Southern Shores"<?php if( $branch=="Southern Shores" ) echo ' selected' ?>Southern Shores</option>
   <option value="St. Katherine"<?php if( $branch=="St. Katherine" ) echo ' selected' ?>St. Katherine</option>
   <option value="Teufelberg"<?php if( $branch=="Teufelberg" ) echo ' selected' ?>Teufelberg</option>
   <option value="the Mists"<?php if( $branch=="the Mists" ) echo ' selected' ?>the Mists</option>
   <option value="Vinhold"<?php if( $branch=="Vinhold" ) echo ' selected' ?>Vinhold</option>
   <option value="Westermark"<?php if( $branch=="Westermark" ) echo ' selected' ?>Westermark</option>
   <option value="Wolfscairn"<?php if( $branch=="Wolfscairn" ) echo ' selected' ?>Wolfscairn</option>
</select>

理论上,在问号(?&gt;)之后应该有一个结束括号,但是它出现在字符串中。

无论如何,如果我将此代码直接复制到HTML中,一切都按预期工作。如果我通过JavaScript中的命令将其填充到DIV标记的html中,如:

$("#namebranchoptions").html(data);

内容在选择中正确显示,但没有任何内容显示为已选中(显示为空白)。之后我在HTML中插入了一个语句来显示变量的值:

<?php echo "Branch: " . $branch . "<br />" ?>

这似乎是正确的。我很难过。如上所述,如果我将上述内容粘贴到HTML中,手动插入DIV标记并重新加载页面,我会得到预期的结果。我不明白为什么会有这种差异。它可能是SELECT的一些微妙方面或某些东西,我不知道。这令人沮丧。

2 个答案:

答案 0 :(得分:1)

如果你这样做,你会不会选择2x元素? <option value = '' selected></option>?默认情况下,即使没有selected属性,也会选择第一个选项,除非在兄弟姐妹中指定了所选属性。

在每个打开的选项标签上都缺少结束>,这可能会造成困难。在echo ' selected' ?>之后,您正在关闭<?php ### ?>但不关闭html标记。

<select class='form-control' id='branch' name='branch'>
   <option value = '' selected></option>
   <option value="Caldarium"<?php if( $branch=="Caldarium" ) echo ' selected' ?>>Caldarium</option>
   <option value="Cloondara"<?php if( $branch=="Cloondara" ) echo ' selected' ?>>Cloondara</option>
   <option value="Crosston"<?php if( $branch=="Crosston" ) echo ' selected' ?>>Crosston</option>
   <option value="Darkwood"<?php if( $branch=="Darkwood" ) echo ' selected' ?>>Darkwood</option>
   <option value="Darkwood - Caer Darth"<?php if( $branch=="Darkwood - Caer Darth" ) echo ' selected' ?>>Darkwood - Caer Darth</option>
   <option value="Darkwood - Hawks Haven"<?php if( $branch=="Darkwood - Hawks Haven" ) echo ' selected' ?>>Darkwood - Hawks Haven</option>
   <option value="Darkwood - Konigstadt"<?php if( $branch=="Darkwood - Konigstadt" ) echo ' selected' ?>>Darkwood - Konigstadt</option>
   <option value="Darkwood - Montaigne du Roi"<?php if( $branch=="Darkwood - Montaigne du Roi" ) echo ' selected' ?>>Darkwood - Montaigne du Roi</option>
   <option value="Darkwood - St. David's"<?php if( $branch=="Darkwood - St. David's" ) echo ' selected' ?>>Darkwood - St. David's</option>
   <option value="Esfenn"<?php if( $branch=="Esfenn" ) echo ' selected' ?>>Esfenn</option>
   <option value="Southern Shores"<?php if( $branch=="Southern Shores" ) echo ' selected' ?>>Southern Shores</option>
   <option value="St. Katherine"<?php if( $branch=="St. Katherine" ) echo ' selected' ?>>St. Katherine</option>
   <option value="Teufelberg"<?php if( $branch=="Teufelberg" ) echo ' selected' ?>>Teufelberg</option>
   <option value="the Mists"<?php if( $branch=="the Mists" ) echo ' selected' ?>>the Mists</option>
   <option value="Vinhold"<?php if( $branch=="Vinhold" ) echo ' selected' ?>>Vinhold</option>
   <option value="Westermark"<?php if( $branch=="Westermark" ) echo ' selected' ?>>Westermark</option>
   <option value="Wolfscairn"<?php if( $branch=="Wolfscairn" ) echo ' selected' ?>>Wolfscairn</option>
</select>

如果循环遍历数组,代码会更清晰。喜欢:

    $things = array(
       array('name'=>'Caldarium'),
       ... etc..
    );
    $element = '<select class='form-control' id='branch' name='branch'>';
     $element = '<option value=""></option>';
     foreach ($things as $thing){ 
       $selected=''; 
       if($thing['name']===$branch){
          $selected="selected"
       } 
       $element .= '<option value="'.$thing['name].'" '.$selected.'>'.$thing['name].'</option>';
     }
    $element .= '</select>
    echo $element

答案 1 :(得分:1)

感谢您的建议。稍微困惑之后,我找到了如何处理它...正如第一条评论所指出的那样,PHP程序应该确定选项被标记为“select”ed ...然后该技巧引用了分支我需要进行比较(值是什么来确定哪个选项设置了select属性)。我使用了一个隐藏的输入集:

<input id="namebranch" value = "<?php echo $branch; ?>" hidden />

然后修改了ajax代码:

    function getNameBranch()
     {
        var region = document.getElementById("nameregion").value;
        var branch = document.getElementById("namebranch").value;
        $.ajax
       ({
           type: "POST",
           url: "namebranch.php",
           data: { 'myRegion' : region, 'branch' : branch },
           //cache: false,
           success: function(data)
           {
//alert( data );                 
              $("#namebranchoptions").html(data);
           }  // end success
        }); // end ajax call
     }; // end function getNameBranch

在修改PHP之后,确保我有正确的选项,它完美地工作。谢谢你指出我正确的方向!