请参阅以下有关jsfiddle的代码:
http://jsfiddle.net/j9b0uL6m/3/
var message1 = "E-mail has to contain @.";
var message2 = "You have to write your name.";
var message3 = "The password is 123456.";
var mail = $(this).parent().find(".mail").val();
var jmeno = $(this).parent().find(".jmeno").val();
var heslo = $(this).parent().find(".heslo").val();
var hint = "Those errors appeared:";
if (mail.indexOf("@") < 0) {
hint += "\n\n" + message1;
}
if (jmeno === "") {
hint += "\n\n" + message2;
}
if (heslo === "123456") {
hint += "\n\n" + message3;
}
alert(hint);
问题是,由于某种原因,仅当div包含带有类邮件的输入时才会显示警报。在其他情况下,它不起作用。你能救我吗?
答案 0 :(得分:1)
因为没有类邮件的元素,mail
变量返回未定义,所以你必须检查它是否未定义那个案子操纵它:
if (typeof mail != 'undefined' && mail.indexOf("@") < 0) {
hint += "\n\n" + message1;
}
如果你没有检查它,它将在运行时抛出错误,因为它正在抛出:
TypeError:邮件未定义
答案 1 :(得分:1)
嗯,发生错误,因此您的脚本不再执行。
未捕获的TypeError:无法读取属性&#39; indexOf&#39;未定义的
在第13行(if (mail.indexOf("@") < 0) {
),您正在检查&#34; @&#34;在没有批准变量mail
之前。
mail
应在第7行(var mail = $(this).parent().find(".mail").val();
)中定义,但如果没有匹配的元素,mail
将成为undefined
。
只需写下你的条件
if ((undefined !== mail) && (YOURCONDITION) {
// ...
}
答案 2 :(得分:1)
您Uncaught TypeError: Cannot read property 'indexOf' of undefined
因为父元素中没有类mail
的元素。
所以你可以使用
$.trim()如果为undefined
或只有whitespace
,则会返回空字符串。
if ($.trim(mail).indexOf("@") < 0) {\
我修改了你的代码以使其更好
var message = []; //array for custom messages
message['mail'] = "E-mail has to contain @.";
message['jmeno'] = "You have to write your name.";
message['heslo'] = "The password is 123456.";
$(".odkaz").click(function () {
var hint = []; //hint empty array
$(this).parent().find('input').each(function () { //run through each input in the parent element
var cls = $(this).attr('class'), //get the class
inp = $.trim(this.value), //get the value of input and trim it
ret = Check(cls, inp); //get the return value from the function Check
if (ret.length) hint.push(ret); //if returned value is not empty add to hint array
});
if (hint.length) { //if hind array has length then alert
alert('Those errors appeared:\n' + hint.join('\n'));
}
});
function Check(cls, inp) {
if (cls == 'mail') {
if (inp.indexOf("@") < 0) {
return "\n\n" + message['mail'];
}
} else if (cls == 'jmeno') {
if (inp === "") {
return "\n\n" + message['jmeno'];
}
} else if (cls == 'heslo') {
if (inp === "123456") {
return "\n\n" + message['heslo'];
}
}
return '';
}