3

想知道您是否可以向我展示处理此逻辑的更好方法?我写了这篇文章,并为此感到非常惭愧。你能告诉我这个逻辑的更好的优化版本吗?

PS $结果[“项目”]; 返回一个整数。

$type = $result["item"];
switch ($type){
case "1":
$type_output = '    
<option value="1" selected>Cash</option>
<option value="2">Cheque</option>
<option value="3">Debit Card</option>
<option value="4">Credit Card</option>';
break;

case "2":
$type_output = '    
<option value="1">Cash</option>
<option value="2" selected>Cheque</option>
<option value="3">Debit Card</option>
<option value="4">Credit Card</option>';
break;

case "3":
$type_output = '    
<option value="1">Cash</option>
<option value="2">Cheque</option>
<option value="3" selected>Debit Card</option>
<option value="4">Credit Card</option>';
break;

case "4":
$type_output = '    
<option value="1">Cash</option>
<option value="2">Cheque</option>
<option value="3">Debit Card</option>
<option value="4" selected>Credit Card</option>';
break;
}

html

<td>
<select style="width:200px;" name="payment_type">
<option value=""> </option>
'.$type_output.'
</select>
</td>

谢谢

4

8 回答 8

6

我会使用这种方法

$type = $result["item"];
$type_output = "";

$options =array(
    "1"=>"cash",
    "2"=>"Cheque",
    "3"=>"Debit Card",
    "4"=>"Credit Card",
);

foreach($options as $value=>$text) {
    $type_output .= "<option value=\"$value\"".($type==$value? " selected" : "").">$text</option>\n";
}
于 2013-10-07T19:21:46.117 回答
3

你可以这样做,而且只有一次

<option value="1" <?php if ($type == 1) echo "selected"; ?>>Cash</option>
<option value="2" <?php if ($type == 2) echo "selected"; ?>>Cheque</option>
<option value="3" <?php if ($type == 3) echo "selected"; ?>>Debit Card</option>
<option value="4" <?php if ($type == 4) echo "selected"; ?>>Credit Card</option>
于 2013-10-07T19:19:54.203 回答
1

你在这里重复了很多东西。你可以做类似的事情

<option value="..." <?php if($type == 1) { print "selected"; } ?> >Something</option>

这会起作用,但是您最好使用模板引擎并让它为您处理这类事情。

http://www.smarty.net/docsv2/en/language.function.html.options.tpl

于 2013-10-07T19:20:19.017 回答
1

在你的文档中试试这个:

<option value="1" <?php if ($type == 1) echo 'selected="selected"' ?>>Cash</option>
<option value="2" <?php if ($type == 2) echo 'selected="selected"' ?>>Cheque</option>
<option value="3" <?php if ($type == 3) echo 'selected="selected"' ?>>Debit Card</option>
<option value="4" <?php if ($type == 4) echo 'selected="selected"' ?>>Credit Card</option>'

请记住,selected它本身是无效的,至少在 XHTML 中是这样。您可能会在 HTML5 中侥幸逃脱,但我个人会正确地做到这一点,如上所述。无论哪种方式,请确保根据 W3C 验证器检查您的 HTML 输出。

此外,我倾向于不将大块 HTML 包装在 PHP 字符串中,就像您所做的那样;最好使用 HTML 模式并在需要动态输出的情况下进入 PHP。这使您的 IDE 可以理解文档的结构,并允许语法着色和自动完成工作。

于 2013-10-07T19:20:44.173 回答
1

尝试这个

type_output = '
<option value="1"'.($type == 1 ? " selected" : "").'>Cash</option>
<option value="2"'.($type == 2 ? " selected" : "").'>Cheque</option>
<option value="3"'.($type == 3 ? " selected" : "").'>Debit Card</option>
<option value="4"'.($type == 4 ? " selected" : "").'>Credit Card</option>';
于 2013-10-07T19:22:12.637 回答
0

这就是我的做法。

$options = array(
"1"=>"Cash",
"2"=>"Cheque",
"3"=>"Debit Card",
"4"=>"Credit Card"
);
$type = $result['item'];
$type_output = "";

foreach($options as $value=>$text) {
    if($value==$type){
        $selected = " selected";
    }
    else {
        $selected = "";
    }
    $type_output .= '<option value="'.$value.'"'.$selected.'>'.$text.'</option>';
}

刚刚注意到 Chumkiu 有一个类似的答案,但无论如何我都会发布我的答案,以防某些人比三元 if 语句更清楚

于 2013-10-07T19:32:54.760 回答
0

羞愧)))

sel = document.getElementById("select_id");
if($type>=0&&$type<sel.options.length)
sel.options[$type].selected=true;

做 onLoad 或更好的 onDomReady... 或在您选择代码之后。不要忘记分配一个ID:

<select id="select_id">...

如果您正在控制输入,那么它只是JS 的一行:

document.getElementById("select_id").options[$type].selected=true;
于 2013-10-07T19:24:38.597 回答
0

你可以使用这样的函数:

function selected($selected, $current) {
    if($selected == $current)
        return "selected";
}

接着:

$options = array(
    1 => 'Cash',
    2 => 'Cheque',
    3 => 'Debit Card',
    4 => 'Credit Card'
);
foreach($options as $value => $option)
    echo '<option value="'.$value.'" '.selected($value, $type).'>'.$option.'</option>';

请注意,该selected功能也适用于其他类似情况。

于 2013-10-07T19:20:54.830 回答