简化语法,如何避免重复“if”?

时间:2011-02-10 09:08:16

标签: javascript jquery forms

我希望在字段出错时检查表单并根据需要禁用“提交”按钮。我找到了一个有效的解决方案,但语法很难看。 :)

$(document).ready(function() {
    $("#send").attr("disabled", "disabled");
    $("#validatemail").keyup(function()
    {
        var email = $("#validatemail").val();
        if (email != '')
        {
            if(isvalidmail(email))
            {
                // do stuff
            }
            else
            {
                // do stuff
            }
        }
        else
        {
                // do stuff
        }
    });
    $("#validatetitle").keyup(function()
    {
        var subject = $("#validatetitle").val();
        if (subject != '')
        {
            if ((subject.length < 3) || (subject.length > 30))
            {
                // do stuff
            }
            else
            {
                // do stuff
            }
        }
        else
        {
                // do stuff
        }
    });
    $("#form_message").live('keyup', function()
    {
        // Duplicate is not smart!!!
            var email = $("#validatemail").val(); // Duplicate
            var subject = $("#validatetitle").val(); // Duplicate
            if (
            (isvalidmail(email)) // Duplicate
            &&
            (!((subject.length < 3) || (subject.length > 30))) // Duplicate
            )
            {       
                $("#send").removeAttr("disabled");  
            }
            else
            {
                $("#send").attr("disabled", "disabled");                
            }
    });
});

那么如何简化代码?

我花了几个小时尝试,但它没有用。

非常感谢。

此致

文森特

2 个答案:

答案 0 :(得分:2)

试试这个。


$(document).ready(function() {
    var isEmailValid = false;
    var isSubjectValid = false;
    $("#send").attr("disabled", "disabled");
    $("#validatemail").keyup(function()
    {
        var email = $("#validatemail").val();
        if (email != '')
        {
            if(isvalidmail(email))
            {
                // do stuff
                isEmailValid = true;
            }
            else
            {
                // do stuff
                isEmailValid = false;
            }
        }
        else
        {
                // do stuff
        }
    });
    $("#validatetitle").keyup(function()
    {
        var subject = $("#validatetitle").val();
        if (subject != '')
        {
            if ((subject.length < 3) || (subject.length > 30))
            {
                // do stuff
                isSubjectValid = true;
            }
            else
            {
                // do stuff
                isSubjectValid = false;
            }
        }
        else
        {
                // do stuff
        }
    });
    $("#form_message").live('keyup', function()
    {
            // now just get all the set values here
            $("#send").attr("disabled",(isEmailValid && isSubjectValid) ? "" : "disabled");
    });
});

答案 1 :(得分:0)

最好的方法是declare and initialize those variable globally,然后使用它...以及在条件place them in function中重复的事情,并在必须检查这些条件的地方调用它...