簡體   English   中英

如何在數組中添加按鈕並循環它們?

[英]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,則它不會打開按鈕BE 這是因為它試圖找到不正確的按鈕"#answerBE" ,它應該找到按鈕"#answerB"並按下"#answerE"並將它們都打開。

另一個例子是如果“答案”是ADF,它不會打開按鈕A DF因為它試圖找到不正確的按鈕"#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");
   })
}

jQuery.each()

我相信,你需要這個:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM