我有这个jQuery Validation函数问题。验证仅适用一次

时间:2012-07-07 03:14:25

标签: jquery

下面的功能可以正常工作。这是验证表格。简而言之,我有几个输入字段。如果我点击提交并且未在任一输入中输入任何文本,则会显示验证错误。如果我填写一个字段,则只会更新其中一个字段。但是,如果我再次点击“提交”,即使没有填写第二个表单输入,else {}也会被触发,而不是if {}应该确保它被填写等等。

不熟悉,但这是假的回报;问题

if ($('input[type="text"]:visible').val().length == 0) {
    $('.submitModal').click(function () {
        $('.modal').modal('show'); 
    });
}
else {
    $('.submitModal').click(function () {
        $('.modal').modal('hide'); 
    });
}

知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

这是倒退的想法。绑定点击,期间。没有条件。点击后,决定你想要发生什么(即使这只是意味着忽略点击)。

如果你确实绑定了一个点击,那么填写表单就不会解除绑定。即使你真的可以解开它,也没有什么好理由。

如果.submitModal实际上是一个提交输入元素(而不是具有该类的锚或按钮),而不是绑定一个单击侦听器,请绑定一个提交侦听器。

基于迈克自己的代码起点,这里有一个例子(稍微偏离真实的上下文,因为我没有modal功能而没有不必要的努力!)

$('.submitModal').click(function (e) {
    e.preventDefault();
    $('input[type="text"]:visible').each(function() {
        if ($(this).val().length == 0) {                        
            $('.modal').show();                        
        }
        else {
            $('.modal').hide();
        }
    });
});​

首先,我将事件传递给点击处理程序,然后将preventDefault传递给它。这可以防止锚点导致页面刷新。

但我做的唯一其他事情是将实际的.modal()调用换成通用jQuery .show().hide(),只是为了概念验证逻辑。

迈克,你写的示例代码几乎是爆炸性的(除了preventDefault,假设你确实想要防止默认的锚行为)。这是证据:

jsfiddle.net/gnaXn/2

当填写所有可见文本字段时,“模态”隐藏。当它们再次被清空时,“模态”再次出现。