javascript - 简化语法,如何避免重复 "if"?

标签 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");                
            }
    });
});

那么如何简化代码呢?

我花了几个小时尝试,但没有成功。

非常感谢。

问候,

文森特

最佳答案

试试这个。


$(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");
    });
});

关于javascript - 简化语法,如何避免重复 "if"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4955129/

相关文章:

投票赞成/反对系统的 Javascript 错误

javascript - 在 Javascript 中获取小数点后的数字

javascript - Canvas 拖动鼠标移动

jquery - Chrome 事件触发在大型 DOM 中需要很长时间

python - Django 错误 : "' ChoiceField' object has no attribute 'is_hidden' "

.net - 在绑定(bind)到 DataGridView 的 DataTable 上触发更新

javascript - 为什么我得到 'TypeError: Cannot read property ' length' of undefined'

javascript - offset() 在移动浏览器中返回不同的值

javascript - Jquery 函数在错误时间提交

Angular5 react 形式 : Form array inside another form array