1

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

不熟悉,但是否返回false;问题?

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

知道我做错了什么吗?

4

1 回答 1

1

这是倒退的想法。绑定点击,句号。不是有条件的。在点击时,决定你想要发生什么(即使这只是意味着忽略点击)。

如果您确实绑定了单击,则以不同方式填写表单不会取消绑定。即使您实际上可以解除绑定,也没有充分的理由这样做。

if.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()只是为了验证逻辑的概念。

Mike,您编写的示例代码非常棒(除了 preventDefault 假设您确实想要阻止默认锚行为)。这是证明:

jsfiddle.net/gnaXn/2

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

于 2012-07-07T04:08:55.790 回答