Упростите синтаксис, как избежать дублирования «если»? - PullRequest
1 голос
/ 10 февраля 2011

Я хочу проверить форму, когда поля содержат ошибки, и отключить кнопку отправки, если это необходимо. Я нашел решение, которое работает, но синтаксис уродлив. :)

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

Так как же упростить код?

Я провел несколько часов, пытаясь, но это не сработало.

Большое спасибо.

С уважением,

Vincent

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

Попробуйте это.

<Ч />
$(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");
    });
});
0 голосов
/ 09 ноября 2012

Попробуйте это:

$(document)
.ready(function () {
$("#send")
    .attr("disabled", "disabled"), $("#validatemail")
    .keyup(function () {
    var a = $("#validatemail")
        .val();
    a != "" && isvalidmail(a)
}), $("#validatetitle")
    .keyup(function () {
    var a = $("#validatetitle")
        .val();
    a != "" && (3 > a.length || a.length > 30)
}), $("#form_message")
    .live("keyup", function () {
    var a = $("#validatemail")
        .val(),
        b = $("#validatetitle")
            .val();
    !isvalidmail(a) || 3 > b.length || b.length > 30 ? $("#send")
        .attr("disabled", "disabled") : $("#send")
        .removeAttr("disabled")
})
})
0 голосов
/ 10 февраля 2011

лучший способ - declare and initialize those variable globally, а затем использовать его ... и вещи, которые повторяются, если условие place them in function, и вызывать его там, где вы должны проверить это условие ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...