jQuery:选择所有选择元素,仅选择其值以发送Ajax

时间:2020-07-06 17:19:27

标签: jquery ajax jquery-selectors

我正在尝试提高我的Ajax请求速度,因此我的Ajax代码是这样的

$.ajax({
    url:url_option,
    type:'POST',
    dataType:'json',
    data:$('#product input[type=\'text\'], #product input[type=\'number\'], #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\'], #product select, #product textarea, #product input[name=\'quantity\']'),
    success:function(json){

    },
});

因为我像$('#product select')这样使用它,它会拾取所有选择框,因此有什么方法可以只拾取已经选择的选择元素,因此我只能在ajax请求中发送选定的选择元素

enter image description here

我尝试了多种方式,例如使用has()not()和伪指令,但无法通过修改以下方式找到仅选择所选Select元素的方法:$('#product select')

例如 我在此笔中有3个选择框,当我在该div中console.log($('#product select'));进行所有输入时,默认选择2个,未选择1个,它将返回全部3个2选择和1个未选择,但我只需要选择两个被选择的元素< / p>

console.log($('#product select')); // is there any way to pick only 2 selected select element
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="product">
    <div class="form-select-group form-group required">
        <label class="control-label" for="input-option28521">HDD/SSD OPTION:</label>
        <select name="option[28521]" id="input-option28521" class="form-control">
            <option value=""> --- Please Select --- </option>
            <option value="192907" selected="selected">250GB HDD</option>
            <option value="192909">320GB HDD</option>
            <option value="192910">500GB HDD</option>
            <option value="192911">750GB HDD</option>
            <option value="192912">1TB HDD</option>
        </select>
    </div>

    <div class="form-select-group form-group required">
        <label class="control-label" for="input-option28523">Ram:</label>
        <select name="option[28523]" id="input-option28523" class="form-control">
            <option value=""> --- Please Select --- </option>
            <option value="192946">4GB</option>
            <option value="192948">6GB</option>
            <option value="192949">8GB</option>
            <option value="192950">10GB</option>
        </select>
    </div>

    <div class="form-select-group form-group required">
        <label class="control-label" for="input-option28527">Add Antivirus:</label>
        <select name="option[28527]" id="input-option28527" class="form-control">
            <option value=""> --- Please Select --- </option>
            <option value="192968" selected="selected">Leave Me Unprotected</option>
            <option value="192970">Install QuickHeal Antivirus 1-Year License (+₦2,500) Renewable</option>
        </select>
    </div>
</div>

如果有人知道或有任何方法可以在SE中发布,请指向该帖子 谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用.filter()来返回具有值的选择:

$('#product select').filter(function(){ return $(this).val().length })

$(() => {
  console.log($('#product select').filter(function(){ return $(this).val().length }).length)
})
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="product">
    <div class="form-select-group form-group required">
        <label class="control-label" for="input-option28521">HDD/SSD OPTION:</label>
        <select name="option[28521]" id="input-option28521" class="form-control">
            <option value=""> --- Please Select --- </option>
            <option value="192907" selected="selected">250GB HDD</option>
            <option value="192909">320GB HDD</option>
            <option value="192910">500GB HDD</option>
            <option value="192911">750GB HDD</option>
            <option value="192912">1TB HDD</option>
        </select>
    </div>

    <div class="form-select-group form-group required">
        <label class="control-label" for="input-option28523">Ram:</label>
        <select name="option[28523]" id="input-option28523" class="form-control">
            <option value=""> --- Please Select --- </option>
            <option value="192946">4GB</option>
            <option value="192948">6GB</option>
            <option value="192949">8GB</option>
            <option value="192950">10GB</option>
        </select>
    </div>

    <div class="form-select-group form-group required">
        <label class="control-label" for="input-option28527">Add Antivirus:</label>
        <select name="option[28527]" id="input-option28527" class="form-control">
            <option value=""> --- Please Select --- </option>
            <option value="192968" selected="selected">Leave Me Unprotected</option>
            <option value="192970">Install QuickHeal Antivirus 1-Year License (+₦2,500) Renewable</option>
        </select>
    </div>
</div>

答案 1 :(得分:0)

尝试使用jquery:选定的选择器$('#product option:selected')。您可以遍历它们以访问值。

    $('#product option:selected').each(function() {
        console.log($(this).val());
    });

请参阅jquery :selected selector文档。