2012-07-08 50 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()

相關問題