如何在数组中添加按钮并循环它们?

时间:2012-07-08 16:24:30

标签: javascript jquery

下面的代码中有一堆字母按钮:

代码:

<?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

问题在于,如果有多个答案。如果“回答”为B E,,则说明它不会启用按钮BE。这是因为它试图找到不正确的按钮"#answerBE",它应该查找按钮"#answerB"和按钮"#answerE"并将它们都打开。

另一个例子是,如果“答案”为A D F,,则它无法启用按钮A DF,因为它正在尝试查找按钮{{1} }这是不正确的,它应该找到按钮"#answerADF",按钮"#answerA"和按钮"#answerD"并将它们全部打开。

所以我的问题是如果有多个答案我怎么能打开多个按钮?我是否需要将所有按钮放在一个数组中并循环显示它们,以便它能够通过所有按钮并打开那些应该打开的按钮?

更新:

下面是调用addwindow()函数的“添加”按钮,添加按钮上方是“答案”列,显示答案行

"#answerF"

3 个答案:

答案 0 :(得分:1)

试试这个:

function addwindow(btn) { 
   var arr = btn.split("");
   $.each(arr, function(i, v) {
      $('#answer' + v).addClass("answerBtnsOn");
   })
}

jQuery.each()

答案 1 :(得分:1)

我相信,你需要这个:

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

答案 2 :(得分:0)

听起来你正在将'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++;
    }
?>