javascript / jquery条件不起作用

时间:2014-10-04 17:44:50

标签: jquery forms if-statement conditional-statements

请参阅以下有关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包含带有类邮件的输入时才会显示警报。在其他情况下,它不起作用。你能救我吗?

3 个答案:

答案 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)

Fiddle Demo

Uncaught TypeError: Cannot read property 'indexOf' of undefined因为父元素中没有类mail的元素。

所以你可以使用

$.trim()如果为undefined或只有whitespace,则会返回空字符串。

if ($.trim(mail).indexOf("@") < 0) {\

Fiddle Demo

我修改了你的代码以使其更好

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 '';
}