2013-05-02 54 views
0

请参考我的小提琴here。我有一个包含动态行的表格,每个表格都包含一个复选框,其中包含变量ID id="monitor_'+rowID+'",其中rowID是一个全局变量,声明为在函数addText()内部没有关键字var。我试图使用.each(function(){});来遍历行,但它似乎不工作。如何遍历几个变量ID?

我的意图是查看每行中的复选框是否被选中。如果是,将调用功能monitoring。 下面是函数:

function monitoring() { 
$('#test').append("checked"); 
fbType = $('td.nth(2)', $(this)).text(); 
fbNum = $('td.nth(3)', $(this)).text(); 
$('#test').append(fbType + fbNum); 

$.post('/request', { 
    inputText: fbNum, 
    key_pressed: fbType.toString() 
}).done(function (reply) { 
    if (reply == "on") { 
     $('#test').append("on "); 
    } else { 
     $('#test').append("off "); 
    } 
}); 

}

您可以添加行,但是选择一个选项,并增加一个号码,然后按按钮“添加”。第一个.append("checked")是为了确保我调用函数,但奇怪的是,它只显示一次,即使我有几个复选框,我检查了所有。

另一个问题,我不能显示如下内容:

fbType = $('td.nth(2)', $(this)).html(); 
fbNum = $('td.nth(3)', $(this)).html(); 

为什么会这样呢?这是至关重要的,因为你可以看到,我会将这些数据发布到python函数中...

请告诉我我的代码出现了什么问题,以及我应该怎么做。

回答

2

你可以改变的元素在你的每个循环。 而我已经改变了第n个选择器,试图获取值。 在你的例子中,你尝试了一个jQuery函数作为CSS选择器。

$('#monitor').click(function() { 
    $('#status_table tr [id^="monitor_"]:checked').each(function() { 
    monitoring($(this).parents('tr')); 
    }); 
}); 

function monitoring($row) { 
    $('#test').append("checked"); 
    fbType = $row.find('td:nth-child(2)').html(); 
    fbNum = $row.find('td:nth-child(3)').html(); 
    $('#test').append(fbType + fbNum); 
} 
+0

啊,所以它会遍历所有行?我真的不知道.each()会如何迭代,尽管我已经多次阅读了关于它的jquery API。 – yvonnezoe 2013-05-02 09:05:28

+0

这只会遍历具有以'monitor_'开头的ID的元素,并且它会在您的案例中找到所有复选框,因为它们都适用于此选择器 – Tomas 2013-05-02 09:07:39

+0

哦,谢谢!但我怎么能确保它通过所有选中的复选框循环并调用函数?它无法显示任何内容,并且无法排除故障。 :( – yvonnezoe 2013-05-02 09:12:25

1

你有一个算法问题就在这里:

$('#monitor').click(function() { 
    $('#status_table tr').each(function() { 
     $check = $('#status_table tr #monitor_' + rowID) 
     if ($check.is(':checked')) { 
      monitoring(); 
     } 
    }); 
}); 

而正如你说这是一个全局变量,它是那么您正在使用ROWID当您使用在最后ROWID你有。每()(如果有是3行,rowID = 3)。

你可以尝试解释你想要与那些线做什么:

fbType = $('td.nth(2)', $(this)).html(); 
fbNum = $('td.nth(3)', $(this)).html(); 
+0

所以我的rowID永远不会是'rowID = type + textInput;'?对于fbType和fbNum,我试图在具有复选框的行中获取这2列的值。你可以玩上面的小提琴。 :) – yvonnezoe 2013-05-02 08:58:09

+0

这里是一个worling小提琴:http://jsfiddle.net/pbuyR/ 我改变了: - 索引现在在开始声明,然后只是增加(更高性能,你不必添加空)。编辑:刚才看到托马斯分叉,即使你去我的代码,你应该明确地继续前进,并按照他的方式清理你的代码。 - '$('#monitor')中的'check'点击()'已经改变 - 我改变了fbType和fbNum,以便它们现在被正确填充 如果您有任何问题随时问。 – MisterJ 2013-05-02 09:44:31

+0

哦呃,我认为你贴错了小提琴。 (我没有看到你提到的变化):( – yvonnezoe 2013-05-03 01:47:32