0

我是 JavaScript 新手,在基本验证方面取得了一些成功,但我不知道如何做到这一点。

我所拥有的是可以有 1 到 10 个下拉框的表单,具体取决于用户的选择。从我的数据库中检索到这些框中的值。我要做的是确保用户在我将这些数据放回我的数据库之前没有多次选择相同的值。

下面的代码是我到目前为止提出的。当 JavaScript 函数运行时,它返回到同一页面,但警报出现在站点上,但不像以前在其他页面上使用它时那样出现在弹出框中。它确实看到这些值已被多次选择,但我做错了,因为我得到了以前在其中包含数据的 php 变量的未定义索引错误。

<script type="text/javascript">
    <!--
    var nov = "document.getElementById("
    NOV
    ").value == ''";
    var checknov = new Array();
    checknov[] == 0;
    function validate_reg() {
        while (nov > 0) {
            for (var veh = checknov) {
                if (document.getElementById("FLT").value == '' == veh) {
                    window.alert("You Cannot Assign The Same Vehicle More Than Once");
                }
                else {
                    checknov[] = document.getElementById("FLT").value == '';
                }
            }
            nov--;
        }
    }

    -->
</script>

我已将变量 nov 添加到 id 中,因为它是在表单中定义的。

    <script type="text/javascript">
<!--
var nov = document.getElementById("NOV").value == '';   
var checknov=new Array();
checknov[]==0;
    function validate_reg()
     {
                while (nov>0)
                    {
                        for (var veh=checknov)
                            {
                                if (document.getElementById("FLT"nov).value == '' == veh)
                                    {
                                        window.alert("You Cannot Assign The Same Vehicle More Than Once");
                                    }
                                else
                                    {
                                        checknov[] = document.getElementById("FLT"nov).value == '';
                                    }
                            }
                        nov--;
                    }
     }

  -->
  </script>
4

1 回答 1

0

这段代码太糟糕了……首先,您不应该在客户端进行验证!这很容易解决,正如您已经看到的那样,如果验证不起作用,服务器端就会陷入困境。所有验证都应该在服务器端完成。或者两者兼而有之,如果您愿意的话(可以在用户浪费时间等待服务器请求之前提醒他们)。

无论如何,您的代码中存在无数缺陷。让我们先来看看它们。我指的是第二个代码示例。首先,您将一个字符串分配给nov,当您显然打算使用一个函数时。然后您对checknov. 没关系,这是一个语法错误,从浏览器的警告中应该很明显,但即使它有效,它也不会做任何事情!

然后你有一个检查是否nov大于零的函数......但是nov是一个字符串。这种比较是没有意义的!然后您尝试在完全无效的条件下执行 for 循环。for 循环包含三个部分:初始化、循环条件和循环后操作。您可能打算使用 while 循环,但即便如此,您的条件也是无效的,因为您正在分配一个值而不是检查等价性。我什至不确定您从其余代码中的意图是什么。

老实说,你已经证明你对 JavaScript 几乎一无所知。我建议先放下它并学习 JS。

但无论如何,更正确的验证方法是使用类似 的东西document.getElementsByClassName(),它会返回一个类中的 DOM 对象数组(并为您的所有表单元素提供该类)。结果,您将获得表单选择框(您称之为下拉框)的元素。然后,您可以使用 for 循环遍历它(回想一下,它.length可用于查找数组的大小)。尽管您还需要了解 for 循环的工作原理,但您的代码表明您不需要。

在该循环中,您必须再次遍历所有元素,因为您必须将每个元素与所有其他元素进行比较。有点低效且过于简单,但在这种情况下足够合适。

编辑:我还应该指出,您可以使用<DOM element>.options[<DOM element>.selectedIndex].value.

最后,我再次强调,不要只做客户端验证

EDIT2:另外,不要在 script tags 中使用 HTML 注释

于 2013-06-21T16:39:30.893 回答