2012-11-17 33 views
1

我有一個的jsfiddle here只讀文本輸入不會針對單一的答案

請看問題2中的jsfiddle表作爲這個問題只包含一個單一的答案。

在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> 

回答

2

你禁用循環只是檢查兩個問題中的第一個;一個經典的錯誤。試試這個:

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

questions現在是2,而不是1和這兩個問題將被掛繞。