javascript - 尝试让内联验证[func Call] 识别我的函数

标签 javascript jquery html validation jquery-validation-engine

我在这里关注这个问题太久了。我尝试在 2 个字段上使用两组验证(两个日期,验证发生在 blur 上,这是验证引擎的默认事件)。

第一组验证始终发生,并验证用户输入的日期是否有效。

仅当两个字段都有正确的日期时才会进行第二组验证。它执行检查以验证两组日期是否具有要搜索的有效日期范围。

但这是我目前在使用自动取款机时遇到的第二个问题。由于某种原因,我的 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>

最佳答案

我认为你增加了你并不真正需要的复杂性(这似乎在 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>

...它更短,并且更清楚它在做什么。

此外,无需在 document.ready block 内定义命名函数(在本例中为 rangeCheck())。如果您愿意,您可以这样做,但如果您这样做,您可能希望将其显式分配到全局范围中,如下所示:

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

关于javascript - 尝试让内联验证[func Call] 识别我的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5642683/

相关文章:

java - 如何将 jwplayer 与 rest 查询一起使用?

css - 在单独的 float div 中垂直对齐 P 元素

html - CSS 垂直高度对齐

html - 出站链接的 GA 事件跟踪不起作用

javascript - 容器、行、列 - 在 React-Bootstrap 中不起作用

javascript - 添加自定义 javascript 到 wix

javascript - 使用 JavaScript 计算精确的变化

javascript - js中的二维数组

jquery - ASP.NET MVC 检查表单输入在提交时是否有效

javascript - 将一个 div 的结果复制到 textarea-div