我想實現的東西就像這個截圖:通過某種名單的強制選擇的元素
它基本上是在PHP/HTML形式,並很好地工作。然而它並不完全是我想要做的。
我想從左側取元素並將它們放在右側,並使用右側元素驗證表單。
atm,一切正常,但我的問題是:提交表格之前需要「選擇」右側的所有元素。
有沒有這樣做的方式,而沒有右側的元素被「選中」。
從技術上講,我只是想將右側的「推送元素」全部默認選中。
我想我的問題來自於事實,我使用的,而不是另一種輸入的選擇(我可以用一個文本,或某種其他輸入的?)
感謝
僅供參考,這裏是這個
的JavaScript
<script type="text/javascript" language="Javascript">
function move(sens) {
var i, sourceSel, targetSel;
if (sens == 'right') {
sourceSel = document.getElementById('selectBoxOne');
targetSel = document.getElementById('selectBoxSecond');
} else {
sourceSel = document.getElementById('selectBoxSecond');
targetSel = document.getElementById('selectBoxOne');
}
i = sourceSel.options.length;
while (i--) {
if (sourceSel.options[i].selected) {
targetSel.appendChild(sourceSel.options[i]);
}
}
}
</script>
PHP/HTML
我的源代碼<tr>
<th>Associated rights</th>
<td>
<table border="0" cellspacing="0" id="table">
<tr>
<td>
Available (unused) rights (pbroles) <br />
<select name="kiki" multiple="multiple" id="selectBoxOne" size="10" style="width: 325px">
<?php
$q_pbroles = '
SELECT
p.name
FROM
firecall_pbroles p
WHERE
p.name not in (
SELECT
p.name
FROM
firecall_pbroles p,
firecall_roles r,
firecall_l_roles l,
firecall_pbroles_types t
WHERE
p.id = l.pbrole_id
AND
r.id = l.role_id
AND
t.id = p.type
AND
r.id = '.$role_id.'
)
;';
$prep = $dbh->prepare($q_pbroles);
$prep->execute();
$arrAll = $prep->fetchAll();
foreach($arrAll as $data)
{
echo '<option id="multiple'.$data['id'].'" value="'.$data['id'].'">'.$data['name'].'</option>';
}
?>
</select>
<br />
Ctrl+Click to select multiple pbroles
</td>
<td>
<input type="button" value="<<" onclick="move('left');"><br />
<input type="button" value=">>" onclick="move('right');">
</td>
<td>
pbroles in this Role<br />
<select name="pbRoles[]" multiple="multiple" id="selectBoxSecond" size="10" style="width: 325px">
<?php
$q_pbroles = '
SELECT
p.id,
p.name,
t.roletype,
t.descr
FROM
firecall_pbroles p,
firecall_roles r,
firecall_l_roles l,
firecall_pbroles_types t
WHERE
p.id = l.pbrole_id
AND
r.id = l.role_id
AND
t.id = p.type
AND
r.id = '.$role_id.'
ORDER BY
p.type;
';
$prep = $dbh->prepare($q_pbroles);
$prep->execute();
$arrAll = $prep->fetchAll();
foreach($arrAll as $data)
{
echo '<option id="multiple'.$data['id'].'" value="'.$data['id'].'" selected>'.$data['name'].'</option>';
}
?>
</select>
<br />
Ctrl+Click to select multiple pbroles
</td>
</tr>
</table>
</td>
</tr>
我確實做了一次這個對話框控件。但是在彙編中。我有這樣的感覺,用js,css,html,php,sql你可以變得更優雅一些。丟掉桌子,但「選擇」是正確的因素。我是否正確理解,當頁面加載時,您希望* right *'select'中的所有'option'?一個名爲'pbRoles []'的'。 – sqykly
確實:) 事實上,我只是希望_right_'select'中的所有選項都可以在表單中進行驗證,而不管他們的選擇如何(我想說的是「只要選項處於正確的選擇狀態,窗體「(這是左右選擇的目標,右選擇具有選擇的選項,我不想做兩件事(使用按鈕按下它們並選擇它們,即使我可以自動選擇它們,如果用戶錯誤地取消選擇它會發生什麼?),而不必手動(藍色)「選擇它們」,以避免錯誤,如果用戶取消選擇它們。 – olivierg