2012-07-08 102 views
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"); 
} 

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

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

另一个例子是,如果“答案”是A D F,它不会打开按钮ADF,因为它试图找到按钮"#answerADF"这是不正确,应该寻找按钮"#answerA",按钮"#answerD"和按钮"#answerF"并把它们全部打开。

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

UPDATE:

下面是“添加”按钮,呼吁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>"; 
+1

你能告诉我们一个演示吗?顺便说一句,你的PHP是服务器端的。 jQuery和***全部JavaScript ***(除了[tag:node.js])运行客户端。向我们展示生成的HTML。并演示。 – 2012-07-08 16:28:30

+1

你能告诉我们如何调用'addwindow'吗? – mVChr 2012-07-08 16:29:54

回答

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

还可以看出你是逃避你的报价,但如果你同时使用串联是没有必要的。

注:与双引号的,当他们在 单引号的字符串出现定界符语法,变量和特殊字符 转义序列不会被扩大。

<?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++; 
    } 
?> 
+0

嗨,试过你的代码,但如果有多个答案它仍然不会打开按钮。我测试了它,因为我添加了答案为“A C”的行,但按钮A和按钮C未打开 – user1490145 2012-07-08 16:53:53

+0

@ user1490145 - 请参阅编辑。我的代码最初是针对不同的分隔符构建的,但是,您可以修改实例以使用适当的分隔符,以便可以正确分隔字符串。 – RobB 2012-07-08 16:57:07

1

试试这个:

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

jQuery.each()

相关问题