2009-10-04 74 views
1

我想在用户输入信息时验证表格单元格中的数据。表格中的每个单元格都有不同的验证方法。我有一个15格和100行的桌子。一些单元格会根据一些设置隐藏。所以我不能使用cellIndex来定义事件。所以在每个单元定义的验证规则,这是我做过什么定义表格单元格中的数据验证事件jquery

jQuery(function ($) { 
$('table#<%= MyTable.ClientID %> tr td input[type=text]').filter('input[id*=tCell1]') 
        .bind('blur', validateCell1);  
$('table#<%= MyTable.ClientID %> tr td input[type=text]').filter('input[id*=tCell2]') 
        .bind('blur', ValidateCell2);  
$('table#<%= MyTable.ClientID %> tr td input[type=text]').filter('input[id*=tCell3]') 
        .bind('blur', ValidateCell3);   
$('table#<%= MyTable.ClientID %> tr td input[type=text]').filter('input[id*=tCell4],input[id*=tCell5]') 
        .bind('blur', ValidateCell4and5); 
}); 

因为我附上“的onblur”事件对每一个电池,它加载缓慢。有没有其他办法呢?

谢谢, sridhar。

回答

1

而不是使用冗余通配符属性过滤器(如input[id*=tCell1]),往往会减慢速度,尝试更直接地选择元素。如果你事先知道元素的位置,那应该不成问题。例如:

$("table tr").each(function() { 
    $(this).find("td:eq(0) input[type=text]").bind('blur', validateCell1); 
    $(this).find("td:eq(1) input[type=text]").bind('blur', validateCell2); 
    $(this).find("td:eq(3) input[type=text]").bind('blur', validateCell3); 
    $(this).find("td:eq(4) input[type=text]").bind('blur', ValidateCell4and5); 
    $(this).find("td:eq(5) input[type=text]").bind('blur', ValidateCell4and5); 
}); 

此外,我不认为有任何需要使用filter。一个深思熟虑的选择器应该足够了。

+0

这种方法的问题是我有一些表中显示或隐藏基于一些设置的列。 – Sridhar 2009-10-04 14:32:20

+0

@Sridhar - 我建议在你的问题中包含额外的信息,否则我完全不知道如何得到进一步的帮助。 – karim79 2009-10-04 14:53:36

0

你可以尝试类:

$(".classMyTable tbody tr").each(function() { 
    $(".classMyInput_1", $(this)).bind('blur', validateCell1); 
    $(".classMyInput_2", $(this)).bind('blur', validateCell2); 
    $(".classMyInput_3", $(this)).bind('blur', validateCell3); 
    $(".classMyInput_4, .classMyInput_5", $(this)).bind('blur', ValidateCell4and5); 
}); 

,如果这个解决方案为你服务,你应该,因为它是基于作为取@ karim79正确的响应。