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

ただし、唯一の問題は、上記のコードでは1つの回答ボタンしかオンにできないことです。たとえば、「回答」がの場合、Bボタンを探し、ボタン"#answerB"であるそのボタンをオンにしますB。または、「回答」がの場合、Eボタンを探して、ボタン"#answerE"であるそのボタンをオンにしますE

問題は、複数の答えがある場合です。「回答」の場合、ボタンとB E,はオンになりません。これは、正しくないボタンを見つけようとしているためです。ボタンとボタンを探して、両方をオンにする必要があります。BE"#answerBE""#answerB""#answerE"

もう1つの例は、「回答」がボタンをA D F,オンにしない場合で、正しくないボタンを見つけようとしているため、ボタン、ボタン、およびボタンを探してすべてオンにする必要があります。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>";
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

また、引用符をエスケープしているように見えますが、連結も使用している場合は必要ありません。

注:二重引用符やヒアドキュメントの構文とは異なり、特殊文字の変数とエスケープシーケンスは、単一引用符で囲まれた文字列で使用される場合は展開されません。

<?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 に答える