пытаясь получить действительный валидатор [funcCall], чтобы пересмотреть мою функцию - PullRequest
0 голосов
/ 13 апреля 2011

Я смотрел на это слишком долго здесь.Я пытаюсь использовать два набора проверки для 2 полей (обе даты, проверка происходит onblur, событие по умолчанию для механизма проверки).

Первый набор проверки происходит все время и проверяет, что пользовательимеет допустимые даты ввода.

Второй набор проверки происходит только тогда, когда оба поля имеют правильные даты.он выполняет проверку, чтобы убедиться, что оба набора дат имеют допустимый диапазон дат для поиска.

Но во-вторых, у меня сейчас проблема с банкоматом.Мои FuncCalls по какой-то причине не распознаются.Я посмотрел на документацию и источник, но я все еще не уверен, что именно является правильным способом сделать это или, в этом отношении, с точки зрения работы со взаимозависимыми полями, если есть лучший способ справиться с этим.

<html>
    <head>
        <script src="../../inc/functions.js" type="text/javascript"></script>
        <script src="../../inc/jquery-min.js" type="text/javascript"></script>
        <script src="../../inc/jquery.validationEngine.js" type="text/javascript"></script>
        <script src="../../inc/jquery.validationEngine-en.js" type="text/javascript"></script>
        <link href="../../inc/validationEngine.jquery.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript">

        //returns true if end is later than start
            function dateCompare(start, end) {
                if (isDate(start) && isDate(end)) {
                    return (new Date(start.toString()) < new Date(end.toString()))
                }
            }

            $(document).ready(function () {
                $("#arbitraryForm").validationEngine('attach');

                function rangeCheck(field, rules, i, options) {
                    alert("rangeCheck caLLEd");
                    var inDate1 = $("#inDate1").val();
                    var inDate2 = $("#inDate2").val();

                    if (!dateCompare(inDate1, inDate2)) {
                        return "arbitarty error";
                    }
                }

                $("#inDate1").blur(function (e) {
                    var inDate1 = PadDate($("#inDate1").val());
                    var inDate2 = PadDate($("#inDate2").val());
                    if (isDate(inDate1)) {
                        document.getElementById("inDate1").value = inDate1;
                        if (isDate(inDate2)) {
                            if (dateCompare(inDate1, inDate2)) {

                            }
                        }
                    }
                }),

                $("#inDate2").blur(function (e) {

                    var inDate2 = PadDate($("#inDate2").val());
                    if (isDate(inDate2)) {
                        document.getElementById("inDate2").value = inDate2;
                    }
                })
            });
        </script>
    </head>
    <form id="arbitraryForm" action="whatever_page.html">
        <div>
            <input type="text" id="inDate1" name="inDate1"  value="" class="validate[required,custom[dateFormat],funcCall[rangeCheck]]" /> 
            <input type="text" id="inDate2" name="inDate1"  value="" class="validate[required,custom[dateFormat],funcCall[rangeCheck]]" /> 
        </div>
            <input id="subbtn" type="submit" value="Run Report" name="subbtn"/>
    </form>
</html>

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Я думаю, вы добавляете сложность, которая вам на самом деле не нужна (похоже, это часто случается с jQuery).Почему бы просто не использовать что-то вроде:

        function rangeCheck() {
            alert("rangeCheck caLLEd");
            var inDate1 = $("#inDate1").val();
            var inDate2 = $("#inDate2").val();

            if (!dateCompare(inDate1, inDate2)) {
                //flag the error in the form here, if you want
                return false;
            }
            return true;
        }

        function blur1() {
            var inDate1 = PadDate($("#inDate1").val());
            var inDate2 = PadDate($("#inDate2").val());
            if (isDate(inDate1)) {
                document.getElementById("inDate1").value = inDate1;
                if (isDate(inDate2)) {
                    if (dateCompare(inDate1, inDate2)) {

                    }
                }
            }
        }

        function blur2() {
            var inDate2 = PadDate($("#inDate2").val());
            if (isDate(inDate2)) {
                document.getElementById("inDate2").value = inDate2;
            }
        }

<form id="arbitraryForm" action="whatever_page.html" onSubmit="return rangeCheck();">
    <div>
        <input type="text" id="inDate1" name="inDate1"  value="" onBlur="blur1();" /> 
        <input type="text" id="inDate2" name="inDate1"  value="" onBlur="blur2();" /> 
    </div>
        <input id="subbtn" type="submit" value="Run Report" name="subbtn"/>
</form>

... это короче и понятнее в том, что он делает.

Кроме того, нет необходимости определять вашу именованную функцию (rangeCheck() в данном случае) внутри блока document.ready.Вы можете, если хотите, но если вы это сделаете, вы можете явно назначить его в глобальную область, например так:

        window.rangeCheck = function(field, rules, i, options) {
            alert("rangeCheck caLLEd");
            var inDate1 = $("#inDate1").val();
            var inDate2 = $("#inDate2").val();

            if (!dateCompare(inDate1, inDate2)) {
                return "arbitarty error";
            }
        };
2 голосов
/ 13 апреля 2011

Переместите вашу функцию rangeCheck за пределы оболочки $(document).ready (например, непосредственно под функцией dateCompare).

Если вы объявляете его в методе $(document).ready, вы ограничиваете его область действия этим методом.

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