2013-07-03 9 views
2

我在过去为JQuery验证插件放了一些自定义方法,但这是我想要检查多个条件的第一个。是否有一种更优雅,可扩展的方式将多个条件添加到JQuery验证自定义方法中?

它是一个简单的场景,我试图检测字段中的HTML的存在。我不需要广泛的正则表达式,我只是想告诉用户html以客户端方式被允许。如果字段值中有html,我当然会阻止服务器端提交,但我希望有一个很好的用户体验。

必须有一个简单的方法来寻找几个关键元素,可以通过循环一个数组来做到这一点?

<script language="javascript"> 
    $(document).ready(function(){ 

    $.validator.addMethod("findhtml", function(value, element) { 

var commentclean = new Boolean(); 

if (element.value.indexOf("<") != -1) 
{ 
    commentclean= false; 
    //alert('found <'); 
} 
else if 
(element.value.indexOf("http") != -1){ 
    commentclean= false; 
    //alert('found http'); 
} 
else 
{ 
    commentclean= true; 
    //alert('nothing found') 
} 

return this.optional(element) || (commentclean); 

}, "* match the string"); 

}); 
</script> 
+0

你应该使用正则表达式来寻找html标记。例如,字符串“0 <1”不包含html。在clien方面使用正则表达式并不像你猜想的那么昂贵:) – YD1m

回答

1

这样的事情,也许?

$(document).ready(function(){ 

    $.validator.addMethod("findhtml", function(value, element) { 

     var commentclean = true, 
      disallowed = ['<', 'http']; 

     for (var i=0, len = disallowed.length; i<len; i++) { 
      if (element.value.indexOf(disallowed[i]) != -1) { 
       commentclean = false; 
       break; 
      }   
     } 

     return this.optional(element) || (commentclean); 

    }, "* match the string"); 

}); 
+0

不错!非常感谢,为客户端检查添加了更多条件的简短,可扩展的方式。 –

0

你可以做这样的事情:

var el=$('<div>').html(value); 
commentclean = ( el.html() == el.text() 
       && el.text().indexOf('http') == -1 
); 
相关问题