4
试图从联机表单中过滤出垃圾邮件。我有一个输入的隐藏div。这个想法是,如果有东西进入现场,表单会将用户标识为bot并拒绝提交。试图实施这种方法后,机器人仍然通过。我不是很熟悉JavaScript(或垃圾邮件过滤,对于这个问题) - 这里就是我的工作:蜜罐实施
HTML(表格内):
<form action="#" method='post' id='vsurvey' name='defer'>
<div id="hp-div">
If you see this, leave this form field blank
and invest in CSS support.
<input type="text" name="question_20579" value="" />
</div>
<input type="submit" value="Submit Request" />
</form>
CSS:
#hp-div { display: none }
JS:
<script type="text/javascript" charset="ISO-8859-1" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" charset="ISO-8859-1" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script>
<script type="text/javascript">
if(!String.IsNullOrEmpty(Request.Form["question_20579"]))
IgnoreComment();
</script>
<![if !IE]>
<script type="text/javascript">
$(document).ready(function(){
$("#vsurvey").validate({
invalidHandler: function(form, validator) {
var errors = validator.numberOfInvalids();
if (errors) {
var message = errors == 1
? 'Oops! You missed 1 field. It has been highlighted'
: 'Oops! You missed ' + errors + ' fields. They have been highlighted below';
$("div.alert span").html(message);
$("div.alert").show();
} else {
$("div.alert").hide();
}
},
errorPlacement: function(error, element) {
return true;
}
})
});
</script>
<![endif]>
一些垃圾邮件机器人能够检测该字段是隐藏的,而不是填充它。 –
而不是将其设置为“display:none;”将它放置在原本不可见的位置 - 放在屏幕的另一侧,位于另一个Node的下面等。您需要考虑某些用户使用“Tab”导航控件,但。也许还可以考虑捕获'keydown'或'keyup'并将另一个隐藏字段标记为“user typed” –
[** fiddle **](http://jsfiddle.net/Vh5xX/)来解释我在最新评论中的含义。 –