2012-02-02 72 views
1

我有一个小问题,下面的代码:关键字if语句indexOf字符串作用奇数?

$('#body').keyup(function(){ 
    var i = $('#body').val(); 

    if(i.toLowerCase().indexOf("contact") >= 0){ 
     $('#tosviolation').fadeIn('fast'); 
     $('#sendForm').attr('action','send.php?f=1'); 
     $('.toscontent').html("TOS Breach!"); 
    } else { 
     $('#tosviolation').fadeOut('fast'); 
     $('#sendForm').attr('action','send.php?f=0'); 
    } 

    if(i.toLowerCase().indexOf("@") >= 0){ 
     $('#tosviolation').fadeIn('fast'); 
     $('#sendForm').attr('action','send.php?f=1'); 
    } else { 
     $('#tosviolation').fadeOut('fast'); 
     $('#sendForm').attr('action','send.php?f=0'); 
    } 
}); 

它检查是否#body(文字区域)包含值“接触”和/或“@”,如果这个textarea的确实含有说值,它会弹出一个div告诉用户他们违反了TOS。使用“@”时,当用户输入时,框会留在那里,但当用户输入“contact”时,框会闪烁几次然后消失,我猜是因为“@”是1个字符长, “联系”是7个字符长,这与此有关。

然后呢,这很奇怪吗?我只是想让它只是fadeIn()并保持淡入。我不介意闪光灯,因为当然,在按键时它必须在用户每次轻触按键时运行该功能,所以这很好,但我可以'当用户在textarea的某个地方输入“contact”时,如何保留它。另外,它使用.attr()的另一部分是引导用户到send.php,如果它包含“contact”,“@” - 那么它将它们推送到send.php?f = 1,如果不包含,然后send.php?f = 0 - #sendForm是我早些时候的表单标签的ID,我认为这已经很好了。

有没有人知道如何让箱子留在那里,一旦它被拉起与数据“联系”?

回答

1

试试这个。请记住,设置表单的属性并依赖它来进行服务器端处理是危险 - 在发布之前,最终用户可以轻松地摆弄它。您应该再次使用服务器进行验证,而不是使用随窗体一起发送的任何GET变量。

$('#body').keyup(function() { 
    var i = $('#body').val(); 
    if (i.toLowerCase().indexOf("contact") >= 0 || i.toLowerCase().indexOf("@") >= 0) { 
     $('#tosviolation').fadeIn('fast'); 
     $('#sendForm').attr('action', 'send.php?f=1'); 
     $('.toscontent').html("TOS Breach!"); 
    } else { 
     $('#tosviolation').fadeOut('fast'); 
     $('#sendForm').attr('action', 'send.php?f=0'); 
    } 
}); 
1

问题是,当你输入“contact”时,你没有“@”符号。因此,您的第一条联系人评估为真,并在#tosviolation中淡出。但是,下一个if语句的计算结果为false,因此它会立即消失。您需要重构if语句(可能使用OR条件,而不是两个单独的if语句)以避免这种情况。

像这样的东西应该工作:

$('#body').keyup(function() { 
    var i = $('#body').val(); 
    var contact = i.toLowerCase().indexOf("contact"); 
    var atsymbol = i.toLowerCase().indexOf("@"); 
    if (contact >= 0 || atsymbol >= 0) { 
     $('#tosviolation').fadeIn('fast'); 
     $('#sendForm').attr('action', 'send.php?f=1'); 
     if(contact >= 0) { 
      $('.toscontent').html("TOS Breach!"); 
     } 
    } else { 
     $('#tosviolation').fadeOut('fast'); 
     $('#sendForm').attr('action', 'send.php?f=0'); 
    } 
}); 
+0

AHH。谢谢!我只注意到了!干杯! :) – unicornication 2012-02-02 10:52:25

1
  1. 为什么你不只是检查这个曾经,当字段失去焦点或formsubmit过吗?这是更容易,更清洁,然后检查每个keyup事件。

  2. 我强烈建议再次检查服务器端的输入。只需简单地添加f = 1或f = 0即可轻松操作。也想想如果用户禁用js会发生什么。