0

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

代码:

<?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");
}

但唯一的问题是上面的代码只能打开一个回答按钮。例如,如果 "Answer" 是B,那么它会寻找 button"#answerB"并打开那个 button B。或者如果“答案”是E,那么它会寻找 button"#answerE"并打开那个 button E

问题是,如果有多个答案。如果“答案”是,B E,那么它不会打开按钮BE。这是因为它试图找到"#answerBE"不正确的按钮,它应该寻找按钮"#answerB"和按钮"#answerE"并将它们都打开。

另一个例子是,如果“答案”是A D F,它没有打开按钮A D,并且F因为它试图找到"#answerADF"不正确的按钮,它应该寻找 button "#answerA"、 button"#answerD"和 button"#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>";
4

3 回答 3

1

尝试这个:

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

jQuery.each()

于 2012-07-08T16:38:15.930 回答
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
于 2012-07-08T16:38:20.563 回答
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++;
    }
?>
于 2012-07-08T16:35:19.303 回答