添加tr标签会导致函数停止工作

时间:2012-05-28 09:52:01

标签: javascript jquery html ajax

我有一个正常工作的功能:

function insertQuestion(form) {   
    var $tbody = $('#qandatbl > tbody'); 
    var $tr = $("<tr class='optionAndAnswer' align='center'></tr>");
    var $noofanswers = $("<td class='noofanswers'></td>");
    var $questionType = '';

    $('.numberAnswerTxt', context).each(function() {
        var $this = $(this);
        var $noofanswersText = '';

        if ($questionType == 'True or False' || $questionType == 'Yes or No') {
            $noofanswersText = $("<span class='naRow string' style='display: block;'>Only 1 Answer</span><input type='text' class='numberAnswerTxtRow answertxt' style='display: none;' onkeyup='numberKeyUp(this)' onkeypress='return isNumberKey(event)' onChange='getButtons()'>").attr('name', $this.attr('name')).attr('value', $this.val());
        }
        else {
            $noofanswersText = $("<span class='naRow string' style='display: none;'>Only 1 Answer</span><input type='text' class='numberAnswerTxtRow answertxt' style='display: block;' onkeyup='numberKeyUp(this)' onkeypress='return isNumberKey(event)' onChange='getButtons()'>").attr('name', $this.attr('name')).attr('value', $this.val());  
        }

        $noofanswers.append($noofanswersText);
    }); 

    $tr.append($noofanswers);
    $tbody.append($tr); 
}

但我希望$noofanswers包含在自己的表格行中,然后我将$noofanswers更改为包含<tr></tr>,以便代码:

var $noofanswers = $("<td class='noofanswers'></td>");

现在变为:

var $noofanswers = $("<tr><td class='noofanswers'></td></tr>");

但如果我这样做,那么$('.numberAnswerTxt', context).each(function() {就不能正常工作。所以我的问题是,如果我添加<tr>标签,那么我需要在函数内进行哪些更改才能让它再次运行?

2 个答案:

答案 0 :(得分:1)

insertQuestion函数已将td元素包装在tr中:

var $tr = $("<tr class='optionAndAnswer' align='center'></tr>");
//...
$tr.append($noofanswers);

您只需修改$tr,而不是将tr添加到$noofanswers,或者您可以移除对append的调用并将tr保留在$noofanswers中{1}}。

//var $tr = $("<tr class='optionAndAnswer' align='center'></tr>");
var $noofanswers = $("<tr><td class='noofanswers'></td></tr>");
//...
//$tr.append($noofanswers);
$tbody.append($noofanswers); 

答案 1 :(得分:0)

你有

var $tr = $("<tr class='optionAndAnswer' align='center'></tr>");
var $noofanswers = $("<td class='noofanswers'></td>");

以后

$tr.append($noofanswers);
$tbody.append($tr); 

因此,您无法将td换成另一个tr,因为它已经被包裹了。然后你应该改变你的代码:

var $noofanswers = $("<tr><td class='noofanswers'></td></tr>");
...
$tbody.append($noofanswers);