1

ここにjsfiddleがあります

jsfiddleテーブルの質問2を見てください。この質問には、回答が1つしか含まれていません。

jquery関数で私が試したことは、質問に1つの回答しか含まれていない場合、その回答の[回答あたりのマーク]列の下に入力されたテキストは読み取り専用であり、その質問の残りの合計マークと同じ値を表示する必要があることを示しています。

また、jsfiddleを見ると、その単一行の[残りの合計マーク]列に5が表示され、0が表示されるはずです。読み取り専用テキスト入力の5から、残りの合計マークの元の数を引いたものとして表示されます。 (5でした)は、その行の[残りの合計マーク数]の下の数が0であることを意味します。

私の質問は、次のようにjsfiddleのjquery関数に何を含める必要があるかということです。

  1. 質問に単一の回答がある場合、そのテキスト入力は読み取り専用です

  2. テキスト入力の合計マーク数を表示します

  3. 読み取り専用テキスト入力の数値と元の残存マーク総数の間の計算を実行する必要があるため、その行の[残りの合計マーク]の下に0が表示されます。

以下は、jquery関数のコードです。

Jquery:

    $(function () {
        //alert("here");         
        var questions = $('#markstbl td[class*="_ans"]').length - 1;

        //disable single entry
        for (var i = 0; i <= questions; i++) {
            if ($("[class*=q" + i + "_mark]").length == 1) {
                var t_marks = $("[class*=q" + i + "_ans]").html();
                //alert(t_marks);
                $("[class*=q" + i + "_mark]").val(t_marks)
                    .attr("disabled", "disabled");
                //$("[class*=q"+i+"_mark]").attr("disabled","disabled");
            }
        }

        //find each question set and add listeners
        for (var i = 0; i <= questions; i++) {
            $('input[class*="q' + i + '"]').keyup(function () {
                var cl = $(this).attr('class').split(" ")[1]
                var questionno = cl.substring(cl.indexOf('q') + 1, cl.indexOf('_'));
                var tot_marks = $(".q" + questionno + "_ans_org").val();
                //alert(tot_marks);
                var ans_t = 0;
                $("[class*=q" + questionno + "_mark]").each(function () {
                    var num = (isNaN(parseInt($(this).val()))) ? 0 : parseInt($(this).val());
                    ans_t += parseInt(num);
                });
                ans_t = tot_marks - ans_t;
                //alert(ans_t);
                //var fixedno = tot_marks;
                var ans = (parseInt(ans_t) < 0) ? tot_marks : ans_t;
                $(".q" + questionno + "_ans").val(ans);
                $(".q" + questionno + "_ans_text").html(ans);
            });
        }
    });​

以下はダイナミックHTMLテーブルです。

HTML:

    <table border='1' id='markstbl'>
<thead>
<tr>
<th class='questionth'>Question No.</th>
<th class='questionth'>Question</th>
<th class='answerth'>Answer</th>
<th class='answermarksth'>Marks per Answer</th>
<th class='totalmarksth'>Total Marks</th>
<th class='emptyth'></th>
</tr>
</thead>
<tbody>
<?php
$row_span = array_count_values($searchQuestionId);
$prev_ques = '';
foreach($searchQuestionId as $key=>$questionId){

?>

<tr class="questiontd">
    <?php
    if($questionId != $prev_ques){
    ?>
    <td class="questionnumtd" name="numQuestion" rowspan="<?php echo$row_span[$questionId]?>"><?php echo$questionId?> <input type="hidden" name="q<?php echo$questionId?>_ans_org" class="q<?php echo$questionId?>_ans_org" value="<?php echo$searchMarks[$key]?>"><input type="hidden" name="q<?php echo$questionId?>_ans" class="q<?php echo$questionId?>_ans" value="<?php echo$searchMarks[$key]?>"></td>
    <td class="questioncontenttd" rowspan="<?php echo$row_span[$questionId]?>"><?php echo$searchQuestionContent[$key]?> </td>
    <?php
    }
    ?>
<td class="answertd" name="answers[]"><?php echo$searchAnswer[$key]?></td>
<td class="answermarkstd">
<input class="individualMarks q<?php echo$questionId?>_mark_0"  q_group="1" name="answerMarks[]" id="individualtext" type="text" />
</td>
<?php
    if($questionId != $prev_ques){
    ?>
<td class="totalmarkstd" rowspan="<?php echo$row_span[$questionId]?>"><?php echo$totalMarks[$key]?></td>
<td class="noofmarkstd q<?php echo$questionId?>_ans_text"  q_group="1" rowspan="<?php echo$row_span[$questionId]?>"><?php echo"<strong>Marks Remaining:<br/>".$searchMarks[$key]."</strong>"?></td>
<?php
    }
    ?>
</tr>
<?php
$prev_ques = $questionId;
}
?>
</tbody>
</table>
4

1 に答える 1

2

無効化ループは、2つの質問のうち最初の質問のみをチェックしています。古典的な1つずつのエラー。これを試して:

var questions = $('#markstbl td[class*="_ans"]').length;

questionsこれで、1ではなく2になり、両方の質問がループされます。

于 2012-11-17T17:32:25.460 に答える