2016-02-11 82 views
0

我有许多输入表格列表并选择过滤器选项。检查这些字段中是否有内容的目标(例如输入不是空的,并且选择了选项)。我无法理解如何使它与更多的这些元素之一一起工作,因为现在如果两个输入具有值并且一个输入来清除它,则将按钮设置为禁用,尽管其中一个输入具有值。帮助我处理它。检查输入和选择是否为空,并启用按钮

function buttonStatus() { 
 
    var buttonDisable = function(){ 
 
    $('input[type="submit"]').attr('disabled', true) 
 
    }, 
 
     buttonEnable = function(){ 
 
     $('input[type="submit"]').attr('disabled', false); 
 
     } 
 

 
    $('input').on('keyup change', function(){ 
 
    var inputText = $.trim($('input').val()) 
 
    if(inputText.length > 0 || $('select option').is(':selected') && $('select option:selected').val() != 0) { 
 
     buttonEnable() 
 
    } 
 
    else { 
 
     buttonDisable() 
 
    } 
 
    }) 
 

 
    $('select').on('keyup change', function(){ 
 
    if ($('option').is(':selected') && $('option:selected').val() != 0 || $.trim($('input').val()).length > 0) { 
 
     buttonEnable() 
 
    } 
 
    else { 
 
     buttonDisable() 
 
    } 
 
    }) 
 
} 
 

 
buttonStatus()
* { 
 
    box-sizing: border-box; 
 
} 
 

 
div { 
 
    margin: 50px; 
 
} 
 

 
input[type="submit"] { 
 
    background: green; 
 
    border: none; 
 
    padding: 5px; 
 
    color: #fff; 
 
} 
 

 
input[type="submit"][disabled] { 
 
    background: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <input type="text" /> 
 
    <input type="text" /> 
 
    <select> 
 
    <option value="0"></option> 
 
    <option value="1">Nigeria</option> 
 
    <option value="2">Kenya</option> 
 
    <option value="3">Tanzania</option> 
 
    <option value="4">Uganda</option> 
 
    <option value="5">Ethiopia</option> 
 
    <option value="6">Mozambique</option> 
 
    </select> 
 
    <select> 
 
    <option value="0"></option> 
 
    <option value="1">Nigeria</option> 
 
    <option value="2">Kenya</option> 
 
    <option value="3">Tanzania</option> 
 
    <option value="4">Uganda</option> 
 
    <option value="5">Ethiopia</option> 
 
    <option value="6">Mozambique</option> 
 
    </select> 
 
    <input type="submit" disabled> 
 
</div>

+0

如果我明白你需要得到什么,你的解决方案是使用'$(this)'来知道你的目标是什么元素。你可以这样做:'var inputText = $ .trim($(this).val())'。问题出在'$('select')'中,因为'$(this)'是select,而不是输入。如果你在输入标签中输入一个类名或一个id(两者不同),这是最简单的。 –

+0

$(this)有一点帮助。 – NeedHate

+0

我不得不对马科斯刚才所说的内容发表双重评论。在函数()中,你用$(this)获得当前目标;这是目前的范围。你也可以通过函数传递一个事件“e”;示例函数(e){...}。当试图写这样的验证时,命名和识别所有内容都容易得多。这样你就可以精确地选出你想要检查的输入/选择。 – jjwdesign

回答

2

您需要迭代所有输入并使用进行选择3210并检查它们的值是否不等于0''

像这样:

function buttonStatus() { 
 
    var buttonDisable = function() { 
 
    $('input[type="submit"]').attr('disabled', true) 
 
    }, 
 
     buttonEnable = function() { 
 
     $('input[type="submit"]').attr('disabled', false); 
 
     } 
 

 
    var elements = $('input[type="text"], select').on('keyup change', function() { 
 
    var valid = false; 
 
    
 
    elements.each(function() { 
 
     var elm = $(this), 
 
      val = elm.val(); 
 
     
 
     if ((val != '0' && elm.is('select')) || (val != '' && elm.is('input'))) { 
 
     valid = true; 
 
     return false; 
 
     } 
 
    }); 
 

 
    if(valid) { 
 
     buttonEnable() 
 
    } 
 
    else { 
 
     buttonDisable(); 
 
    } 
 
    }) 
 
} 
 

 
buttonStatus()
* { 
 
    box-sizing: border-box; 
 
} 
 

 
div { 
 
    margin: 50px; 
 
} 
 

 
input[type="submit"] { 
 
    background: green; 
 
    border: none; 
 
    padding: 5px; 
 
    color: #fff; 
 
} 
 

 
input[type="submit"][disabled] { 
 
    background: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <input type="text" /> 
 
    <input type="text" /> 
 
    <select> 
 
    <option value="0"></option> 
 
    <option value="1">Nigeria</option> 
 
    <option value="2">Kenya</option> 
 
    <option value="3">Tanzania</option> 
 
    <option value="4">Uganda</option> 
 
    <option value="5">Ethiopia</option> 
 
    <option value="6">Mozambique</option> 
 
    </select> 
 
    <select> 
 
    <option value="0"></option> 
 
    <option value="1">Nigeria</option> 
 
    <option value="2">Kenya</option> 
 
    <option value="3">Tanzania</option> 
 
    <option value="4">Uganda</option> 
 
    <option value="5">Ethiopia</option> 
 
    <option value="6">Mozambique</option> 
 
    </select> 
 
    <input type="submit" disabled> 
 
</div>

+0

并非所有的字段都必须被选中 – NeedHate

+0

@NeedHate你是对的。我刚刚更新了我的答案.. –

2

你可以检查任何输入了值,处理的选择情况下,你可以检查selectedIndex

$('div :input').on('input', function() { 
 
    var $container = $(this).closest('div'); 
 
    var disabled = !$container.find(':input:not(:submit)').filter(function() { 
 
    return this.value && ($(this).is('select') ? this.selectedIndex : true); 
 
    }).length; 
 
    $container.find(':submit').prop('disabled', disabled); 
 
});
* { 
 
    box-sizing: border-box; 
 
} 
 
div { 
 
    margin: 50px; 
 
    } 
 
input[type="submit"] { 
 
    background: green; 
 
    border: none; 
 
    padding: 5px; 
 
    color: #fff; 
 
} 
 
input[type="submit"][disabled] { 
 
    background: red; 
 
    
 
    
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <input type="text" /> 
 
    <input type="text" /> 
 
    <select> 
 
    <option value="0"></option> 
 
    <option value="1">Nigeria</option> 
 
    <option value="2">Kenya</option> 
 
    <option value="3">Tanzania</option> 
 
    <option value="4">Uganda</option> 
 
    <option value="5">Ethiopia</option> 
 
    <option value="6">Mozambique</option> 
 
    </select> 
 
    <select> 
 
    <option value="0"></option> 
 
    <option value="1">Nigeria</option> 
 
    <option value="2">Kenya</option> 
 
    <option value="3">Tanzania</option> 
 
    <option value="4">Uganda</option> 
 
    <option value="5">Ethiopia</option> 
 
    <option value="6">Mozambique</option> 
 
    </select> 
 
    <input type="submit" disabled> 
 
</div>

0
function buttonStatus() { 
    var not_emp_inp = $('input:text').filter(function() { return $(this).val() != ""; }); 
    var not_emp_sel = $('select').filter(function() { return $(this).val() != "0"; }); 
    $('input[type="submit"]').attr('disabled', (not_emp_inp.length && not_emp_sel.length) ? false : true); 
} 

$('input,select').on('keyup change', function(){ buttonStatus(); }); 

FIDDLE

+0

并非所有的字段都必须被选中... – NeedHate

+0

@NeedHate这是这样吗?需要一个输入来填充和一个选项来选择 –

0

通常我试着来处理表单验证提交。如果添加必需的属性,可以使验证更容易。你可以尝试更类似这种方法的东西,提交表单id ='formId'。这是一个Boostrap v3表单。

// On form submit 
$('#formId').submit(function(e) { 

    // Check all required fields before submit 
    $('#formId').find('input, select, textarea').each(function() { 
     var self = $(this); 
     if (self.attr('required')) { 
      if (self.parent().hasClass('input-group')) { 
       if (!self.val()) { 
        // Add some display error fadeIn or Class Change here! 
        self.parent().parent().addClass('has-error'); 
        self.parent().parent().find('span').fadeIn(); 
       } else { 
        // Add some display error fadeOut or Class Change here! 
        self.parent().parent().removeClass('has-error'); 
        self.parent().parent().find('span').fadeOut(); 
       } 
      } else { 
       if (!self.val()) { 
        self.parent().addClass('has-error'); 
        self.parent().find('span').fadeIn(); 
       } else { 
        self.parent().removeClass('has-error'); 
        self.parent().find('span').fadeOut(); 
       } 
      } 
     } 
    }); 

    // If has-error classes found, do not submit 
    if ($('.has-error').length > 0) { 
     // Prevent form default submit 
     e.preventDefault(); 
    } else { 
     if (spinner === false) { 
      // Check out the JS Spinner. 
      spinner = new Spinner().spin(); 
      $('#submit_button_div').prepend(spinner.el); 
     } 
    } 

}); 

而是对表单提交,你可以改变它来观看使用上的改变所有表单字段或集中出来,但可能很多JavaScript的处理添加到您的网页。