2016-02-11 118 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的處理添加到您的網頁。