0

以下のコードでは、1 つの列にテキスト入力を表示し、2 番目の列に合計点数の列を表示し、最後の列に残りの点数を表示します。表は次のようになります。

Marks Per Answer               Total Marks    Marks Remaining
(blank text input)               4              4
(blank text input)               6              6
(blank disabled text input)      4              4

しかし、私が抱えている問題は、READONLYテキスト入力が空の場合、「合計マーク」列の値を表示する必要があることです(上記の例の読み取り専用テキスト入力の場合は4)。

また、読み取り専用テキスト入力には合計マーク数が含まれています。「Marks Remaining」列の下に、これは正しくありません。この行では 0 を表示する必要があります (読み取り専用テキスト入力には 4 の値が含まれているため、合計点が 4 の場合、無効なテキスト入力行の残りの点数は 0 になります。)

したがって、ユーザーがページにアクセスすると、テーブルは実際には次のようになります。

Marks Per Answer                                             Total Marks    Marks Remaining
(blank text input)                                                 4              4
(blank text input)                                                 6              6
(readonly text input = 4 (same value as under Total Marks))        4              0

私の質問は、以下のjqueryを変更することで、上記の両方のステップをどのように解決できるかということです:

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

        //disable single entry

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

        //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 = ans_t;
                var answerText = '<strong>' + ans + '</strong>';
                $(".q" + questionno + "_ans").val(ans);
                $(".q" + questionno + "_ans_text").html(answerText);
            });
        }
    });

以下は動的 HTML テーブルです。

<form id="Marks" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">


<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='noofmarksth'>Marks Remaining</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>".$searchMarks[$key]."</strong>"?></td>
<?php
    }
    ?>
</tr>
<?php
$prev_ques = $questionId;
}
?>
</tbody>
</table>
</form>

現時点では、jquery 関数で t_marks 変数を使用してテキスト入力に値を表示しようとしていますが、t_marks を警告しても何も表示されません

アップデート:

完全な 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='noofmarksth'>Marks Remaining</th>
</tr>
</thead>
<tbody>

<tr class="questiontd">
        <td class="questionnumtd" name="numQuestion" rowspan="2">1 <input type="hidden" name="q1_ans_org" class="q1_ans_org" value="5"><input type="hidden" name="q1_ans" class="q1_ans" value="5"></td>
    <td class="questioncontenttd" rowspan="2">Here are 2 answers </td>
    <td class="answertd" name="answers[]">B</td>
<td class="answermarkstd">
<input class="individualMarks q1_mark_0"  q_group="1" name="answerMarks[]" id="individualtext" type="text" />
</td>
<td class="totalmarkstd" rowspan="2">5</td>
<td class="noofmarkstd q1_ans_text"  q_group="1" rowspan="2"><strong>5</strong></td>
</tr>

<tr class="questiontd">
    <td class="answertd" name="answers[]">D</td>
<td class="answermarkstd">
<input class="individualMarks q1_mark_0"  q_group="1" name="answerMarks[]" id="individualtext" type="text" />
</td>
</tr>

<tr class="questiontd">
        <td class="questionnumtd" name="numQuestion" rowspan="1">2 <input type="hidden" name="q2_ans_org" class="q2_ans_org" value="5"><input type="hidden" name="q2_ans" class="q2_ans" value="5"></td>
    <td class="questioncontenttd" rowspan="1">Here is a single answer </td>
    <td class="answertd" name="answers[]">True</td>
<td class="answermarkstd">
<input class="individualMarks q2_mark_0"  q_group="1" name="answerMarks[]" id="individualtext" type="text" />
</td>
<td class="totalmarkstd" rowspan="1">5</td>
<td class="noofmarkstd q2_ans_text"  q_group="1" rowspan="1"><strong>5</strong></td>
</tr>
</tbody>
</table>
4

2 に答える 2

1

だから私はこれがあなたが必要とするすべてであるべきだと思います:

    if ($("[class*=q" + i + "_mark]").length == 1) {
        //alert(t_marks);
        var t_marks = $("[class*=q" + i + "_ans]");
        var t_marksHtml = t_marks.html();
        t_marks.html("0");
        $("[class*=q" + i + "_mark]").val(t_marksHtml).attr('readonly', true);
        //$("[class*=q"+i+"_mark]").attr('readonly',true);
    }
于 2012-12-01T01:31:20.787 に答える
0

これは役立つかもしれません:

$("[class*=q"+questionno+"_mark]").each(function(){

呼ばれるクラスを検索するq[X]_mark

そしてこの行

<input class="individualMarks q<?php echo$questionId?>_mark_0"  q_group="1" name="answerMarks[]" id="individualtext" type="text" />

このようにクラスを書きます:

q[X]_mark_0

これがあなたの問題かどうかはわかりませんが、正しくない場合は引き続き調べます。

于 2012-12-01T00:18:39.160 に答える