繁体   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