indexOf字符串的Keyup if语句执行奇数
Keyup if statement for indexOf string acting odd?
我对以下代码有一个小问题:
$('#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
(文本区域)是否包含值"contact"或/和"@",如果该文本区域确实包含所述值,它会弹出/闪烁一个div,告诉用户他们违反了TOS。对于"@",当用户键入它时,框会保持在那里,但当用户键入"contact"时,框只会闪烁几次就消失了,我猜因为"@"是1个字符长,"contact"是7个字符长的,这与此有关。
再说一遍,这很奇怪吗?我本来打算只使用fadeIn()
并保持淡出状态。我不介意闪光灯,因为当然,在keyup上,每当用户点击某个键时,它都必须运行该功能,所以这很好,但当用户在文本区域的某个地方键入"contact"时,我不知道如何将其保持在那里。此外,它使用.attr()
的另一部分是将用户引导到send.php,如果它确实包含"contact"、"@"——那么它会将用户推送到send.php?f=1,如果不是,那么send.php?f=0——#sendForm
是我之前拥有的表单标签的ID,我认为这已经很好了。
有人知道一旦盒子上有数据"联系人",如何让它留在那里吗?
试试这个。请记住,设置表单的属性并依赖它进行服务器端处理是非常危险的-最终用户可以在发布之前轻松处理。您应该再次使用服务器进行验证,不要使用随表单一起发送的任何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');
}
});
问题是,当您键入"contact"时,没有"@"符号。因此,联系人的第一个if语句求值为true,并在#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');
}
});
-
当字段失去焦点或在表单提交之前,为什么不检查一次呢?这比检查每个按键事件更容易、更干净。
-
我强烈建议再次检查服务器端的输入。简单地添加f=1或f=0可以被容易地操作。还要想想如果用户禁用了js会发生什么。
- 如何在ReactJS JSX中执行嵌套的if-else语句
- Sharepoint JScript if语句未执行
- If语句只执行第一个条件并运行其他条件,但没有结果
- If语句只执行一次
- 执行 If 语句,仅当元素存在时
- Google Chrome 不会执行所有 JavaScript 语句
- 每次 url 哈希更改时执行 if 语句
- ReactJS:在带有 ajax 调用的 .map() 语句完成后执行代码
- 三元运算符未执行的虚假语句
- for 循环中的 if 语句都执行,而不仅仅是一个
- 如何在javascript中循环结束后执行语句
- 如何在页面加载后执行if语句
- 嵌套if语句中的else语句.这段代码如何知道要执行哪个else语句
- If语句仅执行Else部分
- JQuery If Else语句从未执行过
- 如何在使用 window.onerror 处理语句 1 中的错误时继续执行语句 2
- 在Javascript中有顺序执行语句的方法吗?
- Mozilla storageService: "不能执行语句:错误:Permission denied &q
- 如何使用一个变量放置两个执行语句
- NODEjs 在 for 循环中同步执行语句