单个答案不显示只读文本输入

时间:2012-11-17 16:39:03

标签: php jquery html

我有一个jsfiddle here

请查看jsfiddle表中的问题2,因为该问题只包含一个答案。

在jquery函数中我试图做的事情表明如果只是一个问题     包含1个答案,然后在每个答案标记下输入文本     该答案的列应该是只读的并显示相同的值     作为该问题的剩余总标记。

此外,如果您查看jsfiddle,它会指出在该单行的Total Marks Remaining列下,它显示数字5,它应显示数字0.由于readonly文本输入中的数字5减去原始数字总标记剩余(即5)表示该行的剩余总标记数下应为0。

我的问题是我需要在jsfiddle的jquery函数中包含什么,以便:

  1. 如果问题只有一个答案,则该文字输入只读

  2. 显示文本输入中的总标记数

  3. 在该行的“Total Marks Remaining”下显示0 执行只读文本中的数字之间的计算 输入和原始总标记剩余数量。

  4. 以下是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>
    

1 个答案:

答案 0 :(得分:2)

你的禁用循环只检查两个问题中的第一个;一个经典的一个一个错误。试试这个:

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

questions现在将是2而不是1,并且两个问题都将循环播放。