JavaScript / Jquery - 在处理程序内复制表行

时间:2014-04-09 06:48:43

标签: javascript jquery

我有这样的功能:

function isRowEmpty(){
        var emptyRow = true;
        var tableRow;
        $('#ProblemsGrid').delegate('td a', 'click', function() {
            tableRow = $(this).closest ('tr');
        });

        tableRow.find('textarea').each(function(index, element){
                var value = $(element).val();
                if(value != "") {emptyRow = false;}
            });
        return emptyRow;
    }

我要做的是获取具有被点击的表行,并检查该行是否为空,然后返回true / false。我认为我在这里遇到的问题与javascript关闭有关。外部函数中没有更改var tableRow。我一直试图找出一个解决方法,但没有运气。我是JavaScript和Jquery的新手。

更新:以下是使用isRowEmpty()的方法。

function deleteRow(){
        if (isRowEmpty()===true){
                $('#ProblemsGrid').delegate('td a', 'click', function() {
                 $(this).closest ('tr').remove();
                    }); 
        }
}

这是我的HTML的一部分:

<tr>
<td><textarea name='text' style='width: 98%; height:40px'>....</textarea></td>
<td><a href='#anchor' name='DeleteButton' onclick='deleteRow();'> 
<img src='../images/delete.gif'></img> </a>
</td>
</tr>

3 个答案:

答案 0 :(得分:0)

试试这个:

function deleteRow(){
        if (emptyRow){// isRowEmpty returning emptyRow
                $('#ProblemsGrid').delegate('td a', 'click', function() {
                 $(this).closest ('tr').remove();
                    }); 
        }
}

答案 1 :(得分:0)

使用它时应该充分利用jQuery的强大功能。我试图简化你的代码:

$('.deleteRow').on('click', function() {
    var tr = $(this).closest('tr');
    var remove = true;
    tr.find('textarea').each(function() {
        if ($(this).val() != '') {
           remove = false;
        }
    });
    if (remove) {
        tr.remove();
    }
});

只需在您的删除按钮/图片中添加一个类deleteRow,然后丢失内联事件处理程序(onclick='functionCall()

Example jsFiddle

您似乎在动态添加行,然后您的选择器应如下所示:

$(document).on('click', '.deleteRow', function() {
  // ...
});

顺便说一下。来自.delegate文档:

  

从jQuery 1.7开始,.delegate()已被.on()方法取代。但是,对于早期版本,它仍然是使用事件委派的最有效方法。有关事件绑定和委派的更多信息,请参见.on()方法。通常,这些是两种方法的等效模板:

答案 2 :(得分:0)

试试这个。

function isRowEmpty(el){
    var emptyRow = true;
    if(el.val() != "" && el.val() != "....")
        emptyRow = false;
    return emptyRow;
}

$(document).delegate('#ProblemsGrid td a', 'click', function() {
    if (isRowEmpty($(this).closest('tr').find('textarea'))){
        $(this).closest('tr').remove();
    }
});

Fiddle