原谅提出这个问题。我已经经历了很多解决方案,但它对我不起作用。
我有大约5个输入字段,如果它在任何输入字段中找到非法字符(如果有人输入并尝试保存),它应该提醒消息。
到目前为止,当它找到一个时,它会发出警报,然后它会继续并保存它。
我试图突破每个()循环,返回false不起作用。
更好的解决方案也将受到赞赏。
// Illegal Character Check
$('.illegal-check').click(function () {
var illegal = /[&<>]/;
$( ".scoring input:text" ).each(function() {
var inptStr =$(this).val();
if (illegal.test(inptStr)===true) {
alert('Your Scoring field(s) contain these & < > invalid characters. Please remove them and try again.');
return false;
}
});//each
});//click
答案 0 :(得分:3)
$('.illegal-check').click(function (e) {
...
if (illegal.test(inptStr)===true) {
...
e.preventDefault();
return;
}
}
编辑: 你的数据仍然被保存的原因是,即使你使用“return false”打破了循环您的数据提交仍在进行中。你也需要取消它。为此,您使用事件参数“e”,通过调用其“preventDefault”函数传递给事件处理程序。
答案 1 :(得分:0)
您还可以添加变量以查看是否找到了非法值like this:
// Illegal Character Check
$('.illegal-check').click(function () {
var illegal = /[&<>]/;
var found = false;
$( ".scoring input:text" ).each(function() {
var inptStr =$(this).val();
if (illegal.test(inptStr)===true) {
alert('Your Scoring field(s) contain these & < > invalid characters. Please remove them and try again.');
found = true;
}
});
if(!found){
alert("Nothing has been found")
}else{
alert("Illegal char has been found");
}
});
答案 2 :(得分:0)
我个人会在表单上添加一个提交处理程序,而不是在表格单元格上添加click事件。
$('form').on('submit', function(e) {
// ...
if (illegal.test(inptStr)===true) {
alert('...');
e.preventDefault();
return false;
}
// ...
此处,事件将传递给函数,任何错误都会阻止此事件触发实际提交。
答案 3 :(得分:0)
jQuery的$.fn.each
与$.each
类似,将使用return false
突破循环,并继续使用任何非虚假return
进行下一次迭代。 It's documented on the API site
除了所有权利,这部分代码应该没问题。
答案 4 :(得分:0)
这是更新的小提琴。检查单独函数中的错误
$('.illegal-check').click(function () {
if(checkIllegal()) evt.preventDefault();
});
function checkIllegal(){
var illegal = /[&<>]/;
var isIllegal = false;
$( ".scoring input:text" ).each(function() {
if (illegal.test($(this).val()) && !isIllegal) {
alert('Your Scoring field(s) contain these & < > invalid characters. Please remove them and try again.');
isIllegal = true;
return false;
}
});
return isIllegal;
}
答案 5 :(得分:0)
return false
语句确实会突破$(...).each(...)
循环。你的问题是它仍然继续并保存它。您还应该使用e.preventDefault()
停止事件执行其默认操作。 (注意:m1kael在代码转储中也提到了这一点,没有添加解释)
此代码的数量:
// Illegal Character Check
$('.illegal-check').click(function (e) {
var illegal = /[&<>]/;
$( ".scoring input:text" ).each(function() { // loop over elements in form
var inptStr = $(this).val();
if (illegal.test(inptStr)===true) {
alert('...'); // show alert
e.preventDefault(); // prevent default action on click (stop submit)
return false; // break out of elements loop, no more alerts needed
}
});//each
});//click