【问题标题】:Name attribute selector not working名称属性选择器不起作用
【发布时间】:2018-06-15 10:04:01
【问题描述】:

我正在尝试使用名称属性选择器来检查是否选择了选项值,但由于某种原因它不起作用。可以了解原因或提供另一种解决方案吗?我知道我可以简单地在 select 标签上使用 id,但如果有 jQuery 解决方案,我不想这样做。

jQuery

​​>
if(jQuery('#beds select[name*="min_beds"] option').val()){
    alert('hi');
}

html

<div id="beds">
        <select name="min_beds">
            <option value="" disabled selected>Min Beds</option>
            <option value="1">1 Bed</option>
            <option value="2">2 Bed</option>
            <option value="3">3 Bed</option>
            <option value="4">4 Bed</option>
            <option value="5">5 Bed</option>
            <option value="6">6 Bed</option>
            <option value="7">7 Bed</option>
            <option value="8">8 Bed</option>
            <option value="9+">9+ Bed</option>
        </select>
        <p>to</p>
        <select name="max_beds">
            <option value="" disabled selected>Max Beds</option>
            <option value="1">1 Bed</option>
            <option value="2">2 Bed</option>
            <option value="3">3 Bed</option>
            <option value="4">4 Bed</option>
            <option value="5">5 Bed</option>
            <option value="6">6 Bed</option>
            <option value="7">7 Bed</option>
            <option value="8">8 Bed</option>
            <option value="9+">9+ Bed</option>
        </select>
    </div>

【问题讨论】:

  • 试试if(jQuery('#beds select[name*="min_beds"]').val() != null){

标签: javascript jquery html


【解决方案1】:

由于元素的名称完全匹配,因此无需使用修饰符。相反,请使用option:selected:

$('#beds').on('change', function() {
  if( $('#beds select[name="min_beds"] option:selected').val() ){
      alert('hi');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="beds">
        <select name="min_beds">
            <option value="" disabled selected>Min Beds</option>
            <option value="1">1 Bed</option>
            <option value="2">2 Bed</option>
            <option value="3">3 Bed</option>
            <option value="4">4 Bed</option>
            <option value="5">5 Bed</option>
            <option value="6">6 Bed</option>
            <option value="7">7 Bed</option>
            <option value="8">8 Bed</option>
            <option value="9+">9+ Bed</option>
        </select>
        <p>to</p>
        <select name="max_beds">
            <option value="" disabled selected>Max Beds</option>
            <option value="1">1 Bed</option>
            <option value="2">2 Bed</option>
            <option value="3">3 Bed</option>
            <option value="4">4 Bed</option>
            <option value="5">5 Bed</option>
            <option value="6">6 Bed</option>
            <option value="7">7 Bed</option>
            <option value="8">8 Bed</option>
            <option value="9+">9+ Bed</option>
        </select>
    </div>

【讨论】:

  • 谢谢,我在教程中看到了带有修饰符的代码,并认为它是标准语法。 I will accept this answer when the option becomes available
【解决方案2】:

实际上你的选择器是正确的但条件是错误的,要检查是否有一个option被选中,你可以使用这个代码:

if (jQuery('#beds select[name*="min_beds"]').val() !== null) {
  console.log("selected");
} else {
  console.log("not selected");
}

注意:

当然,您需要将此代码附加到您的selectchange 事件处理程序中以反映更改。

演示:

if (jQuery('#beds select[name*="min_beds"]').val() !== null) {
  console.log("selected");
} else {
  console.log("not selected");
}

jQuery('#beds select[name*="min_beds"]').change(function() {

  if (jQuery(this).val() !== null) {
    console.log("selected");
  } else {
    console.log("not selected");
  }

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="beds">
  <select name="min_beds">
    <option value="" disabled selected>Min Beds</option>
    <option value="1">1 Bed</option>
    <option value="2">2 Bed</option>
    <option value="3">3 Bed</option>
    <option value="4">4 Bed</option>
    <option value="5">5 Bed</option>
    <option value="6">6 Bed</option>
    <option value="7">7 Bed</option>
    <option value="8">8 Bed</option>
    <option value="9+">9+ Bed</option>
  </select>
  <p>to</p>
  <select name="max_beds">
    <option value="" disabled selected>Max Beds</option>
    <option value="1">1 Bed</option>
    <option value="2">2 Bed</option>
    <option value="3">3 Bed</option>
    <option value="4">4 Bed</option>
    <option value="5">5 Bed</option>
    <option value="6">6 Bed</option>
    <option value="7">7 Bed</option>
    <option value="8">8 Bed</option>
    <option value="9+">9+ Bed</option>
  </select>
</div>

【讨论】:

    【解决方案3】:

    您需要在下拉列表中绑定change 事件

    $('#beds').change(function() {
        if ($('select[name="min_beds"] option:selected').val()) {
            alert('hi');
        }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="beds">
       <select name="min_beds">
          <option value="" disabled selected>Min Beds</option>
          <option value="1">1 Bed</option>
          <option value="2">2 Bed</option>
          <option value="3">3 Bed</option>
          <option value="4">4 Bed</option>
          <option value="5">5 Bed</option>
          <option value="6">6 Bed</option>
          <option value="7">7 Bed</option>
          <option value="8">8 Bed</option>
          <option value="9+">9+ Bed</option>
       </select>
       <p>to</p>
       <select name="max_beds">
          <option value="" disabled selected>Max Beds</option>
          <option value="1">1 Bed</option>
          <option value="2">2 Bed</option>
          <option value="3">3 Bed</option>
          <option value="4">4 Bed</option>
          <option value="5">5 Bed</option>
          <option value="6">6 Bed</option>
          <option value="7">7 Bed</option>
          <option value="8">8 Bed</option>
          <option value="9+">9+ Bed</option>
       </select>
    </div>

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 2019-09-08
      • 2015-09-01
      • 1970-01-01
      • 2012-02-09
      • 2011-08-29
      • 2014-03-28
      • 1970-01-01
      • 2012-04-28
      相关资源
      最近更新 更多