我有这样的功能:
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>
答案 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()
)
您似乎在动态添加行,然后您的选择器应如下所示:
$(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();
}
});