【问题标题】:disable specific options for select when text box value is between certain values当文本框值介于某些值之间时,禁用特定的选择选项
【发布时间】:2017-05-03 00:25:50
【问题描述】:

我有一个select 框,其中包含来自数据库的service_type 值。我有一个text box 用于word_count

当我在word count 文本框中输入某个值时,我希望选择框取消填充/填充正确的服务。当字数过高或过低时,特定服务不可用。

例如,当word_count1201 时,不超过1200 的选项会被服务禁用。

我的第一个想法是通过 id 找到service select 的选项。但是我从数据库中填充了我的select

这里是一些 js/html 代码,试图让这些 select-options 被禁用。

#agreement_selected_serviceidselect

// word count

$(function() {
  $("#word-count").keyup(function() {
    var word_count = $(this).val();
    var service = $('#agreement_selected_service')
    if (word_count <= 1200) {
      // disable specific service options

    } else if (word_count <= 2400 && word_count >= 1201) {
      // disable specific service options
    }

  });
});
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>


<div class="col-xs-7 ">
  <div class="form-group" style="">
    <label>Pricing Plan</label>

    <%= f.select :selected_service, ServiceType.all.order("id asc").collect {|x| [x.name, x.id]}, {}, :style => "width:100%;"%>

  </div>
</div>

<div class="col-xs-5">
  <div class="form-group" style="">
    <label>How many words?"</label>
    <%= f.text_field :char_amount, class: "form-control", id: 'word-count', style: 'width:120px;', placeholder: "Ex. 500" %>
  </div>
</div>

总而言之,我希望基于word-count 禁用我的selectid=agreement_selected_serviceoptions

【问题讨论】:

  • 您能否修复您的 sn-p 中的错误并重新发布您的问题
  • 我不知道有任何错误。你能解释一下我做错了什么吗?
  • 第一个 sn-p 现在出现了一些东西。在它没有显示任何东西之前,第二个 sn-p 给出了一个 jquery 错误 - “未捕获的 ReferenceError:$ 未定义”,
  • 这是您第一个 sn-p 的输出 -- 定价计划 "width:100%;"%> 多少字?"
  • 第二个似乎不知道$ jquery 是什么......在我的网站上这些工作。我将 $ 更改为 jQuery 在这个网站上仍然是同样的错误。

标签: javascript jquery html ruby-on-rails


【解决方案1】:

您可以根据value 属性禁用options

let word_count = 1203,
    options = $('#agreement_selected_service option'),
    select = $('#agreement_selected_service')

if (word_count <= 1200) {
  options.each(function() {
    let tr = $(this)
    if (tr.val() <= 1200) tr.hide()
  });
} else if (word_count <= 2400 && word_count >= 1201) {
  options.each(function() {
    let tr = $(this)
    if (tr.val() <= 2400 && tr.val() >= 1201) tr.hide()
  });
}

select.change(function() {
  console.log($(this).val())  
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="agreement_selected_service">

  <option value="100">Select a number of words</option>
  <option value="100">100</option>
  <option value="500">500</option>
  <option value="1000">1000</option>
  <option value="1500">1500</option>
  <option value="2000">2000</option>
  <option value="2500">2500</option>
</select>

【讨论】:

  • 现在可以使用,但是选择仍然显示在选择框中。有没有办法完全删除tr 选项?这样它就根本看不到,并且在更改字数时,选择框将更改为未禁用的第一个结果。
  • 您的意思是隐藏tr 元素吗?如果是这样,您可以使用tr.hide() 代替tr.attr('disabled', true)
  • 是的,就是这样!!现在唯一的事情是当前选择的attr 在禁用/隐藏时不会更改为下一个。
  • 每次再次显示时尝试将disabled 设置为false
  • 例如,在我的“上图”中,当我将 how many words 更改为 2000 时,定价计划保持不变,即使它隐藏在列表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多