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

Posted

技术标签:

【中文标题】jQuery:选择所有选择元素,选择值仅以 ajax 发送【英文标题】:jQuery : Select all Select Element with value selected only to send in ajax 【发布时间】:2020-10-26 21:12:17 【问题描述】:

我正在尝试提高我的 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 请求中只发送选择的选择元素

我尝试了很多方法,例如使用 has()not() 和使用伪,但无法通过修改此方法找到仅选择选定元素的方法:$('#product select')

例如。 我在此代码笔中有三个选择框,当我 console.log($('#product select')); 该 div 内的所有输入时,我有 2 个默认选中和 1 个未选中它返回所有三个选中的 2 个和未选中的 1 个,但我只需要选择选中的两个选择元素

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 中发布,请指点我那个帖子 谢谢

【问题讨论】:

【参考方案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>

【讨论】:

谢谢,这就是我要找的东西,非常感谢@Anurag Srivastava【参考方案2】:

试试 jquery :selected 选择器$('#product option:selected')。您可以遍历它们以访问这些值。

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

请参阅jquery :selected selector 文档。

【讨论】:

以上是关于jQuery:选择所有选择元素,选择值仅以 ajax 发送的主要内容,如果未能解决你的问题,请参考以下文章

jQuery选择器

jquery选择器

jQuery 选择器

jQuery选择器

Jquery选择器

jquery标签选择器怎么循环