这是一个奇怪的。在其他人和示例代码等的帮助下,我将一个例程放在一起,基于一个选择,通过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的一些微妙方面或某些东西,我不知道。这令人沮丧。
答案 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之后,确保我有正确的选项,它完美地工作。谢谢你指出我正确的方向!