[英]How to add buttons in an array and loop through them?
下面的代碼中有一堆字母按鈕:
碼:
<?php
$a = range("A","Z");
?>
<table id="answerSection">
<tr>
<?php
$i = 1;
foreach($a as $key => $val){
if($i%7 == 1) echo"<tr><td>";
echo"<input type=\"button\" onclick=\"btnclick(this);\" value=\"$val\" id=\"answer".$val."\" name=\"answer".$val."Name\" class=\"answerBtns answers answerBtnsOff\">";
if($i%7 == 0) echo"</td></tr>";
$i++;
}
?>
</tr>
</table>
現在,下面的代碼可以打開一個答案按鈕:
碼:
function addwindow(btn) {
$('#answer'+btn).addClass("answerBtnsOn");
}
但唯一的問題是上面的代碼只能打開一個答案按鈕。 例如,如果“答案”是B
,那么它將查找按鈕"#answerB"
並打開該按鈕,即按鈕B
或者如果“答案”是E
,那么它將查找按鈕"#answerE"
並打開該按鈕,即按鈕E
問題是,如果有多個答案。 如果“答案”是BE,
則它不會打開按鈕B
和E
這是因為它試圖找到不正確的按鈕"#answerBE"
,它應該找到按鈕"#answerB"
並按下"#answerE"
並將它們都打開。
另一個例子是如果“答案”是ADF,
它不會打開按鈕A
D
和F
因為它試圖找到不正確的按鈕"#answerADF"
,它應該找到按鈕"#answerA"
,按鈕"#answerD"
和按鈕"#answerF"
然后全部打開。
所以我的問題是如果有多個答案我怎么能打開多個按鈕? 我是否需要將所有按鈕放在一個數組中並循環顯示它們,以便它能夠通過所有按鈕並打開那些應該打開的按鈕?
更新:
下面是調用addwindow()函數的“添加”按鈕,添加按鈕上方是“答案”列,其中顯示了答案行
echo '<td class="noofanswerstd">'.htmlspecialchars($searchNoofAnswers[$key]).'</td>';
echo "<td class='addtd'><button type='button' class='add' onclick=\"parent.addwindow('$searchAnswer[$key]');\">Add</button></td></tr>";
嘗試這個:
function addwindow(btn) {
var arr = btn.split("");
$.each(arr, function(i, v) {
$('#answer' + v).addClass("answerBtnsOn");
})
}
我相信,你需要這個:
function addwindow(btn) {
var answers = $.map(btn.split(''),function(chr){ return "#answer"+chr; }).join(', ');
$(answers).addClass("answerBtnsOn");
}
說明 :
btn.split('') //splits btn string into char's array,
// e.g. "ADE" will become ["A","D","E"]
$.map //converts ["A","D","E"]
// to ["#answerA","#answerD","#answerE"]
join(',') //makes "#answerA, #answerD, #answerE" string
// from ["#answerA","#answerD","#answerE"] array
聽起來你正在將'btn'變量作為字符串傳遞。 如果你能夠split()字符串然后使用for()循環遍歷結果數組並分配適當的類,這是可以接受的。
function addwindow(btn){
var answers = btn.split(''); // leave empty if values are not separated by a delimiter
for(var i=0; i < answers.length; i++){
$('#answer'+answers[i]).removeClass('answerBtnsOff').addClass('answerBtnsOn');
}
}
根據您的分隔符,您可能希望修改以下代碼:
btn.split(''); // no delimiter
btn.split(' '); // space delimiter
btn.split(','); // comma delimiter
btn.split('|'); // pipe delimiter
您似乎也在逃避引用,但如果您也在使用連接,則不需要這樣做。
注意:與雙引號和heredoc語法不同,特殊字符的變量和轉義序列在單引號字符串中出現時不會擴展。
<?php
$i = 1;
foreach($a as $key => $val){
echo ($i % 7 == 1 ? "<tr><td>" : "");
echo '<input type="button" onclick="btnclick(this);" value="'.$val.'" id="answer'.$val.'" name="answer'.$val.'Name" class="answerBtns answers answerBtnsOff">";
echo ($i % 7 == 0 ? "</td></tr>" : "";
$i++;
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.