【问题标题】:Disable all select option depend upon array禁用所有选择选项取决于数组
【发布时间】:2019-01-12 19:34:24
【问题描述】:

我有一个多选框,如下所示: 请先看看。

我的代码:

$("select option:contains( " + data + ")").attr("disabled","disabled"); 

仅当数据只有一个值(不在数组中)时才有助于禁用选择选项

问题来了:

var data =  31/8/2018,30/9/2018


I want to disable select options having values == data ,

所以也许,我们需要一个循环来检查 data[1] == 第一个选项,然后是第二个,然后是第三个等等 如果值匹配,则该值将被禁用。

然后检查 data[2] == 第一个选项然后是第二个然后是第三个...等等 如果值匹配,则该选择选项将被禁用。

结果:: 例如。前两个选项将被禁用 有可能吗

<select class="form-control" multiple="" name="month[]" id="month">
 <option value="31/8/2018">  1 @ 31/8/2018   </option>
 <option value="30/9/2018">  2 @ 30/9/2018   </option>
 <option value="31/10/2018"> 3 @ 31/10/2018  </option>
 <option value="30/11/2018"> 4 @ 30/11/2018  </option>
 <option value="31/12/2018"> 5 @ 31/12/2018  </option>
</select>

$("select option:contains( " + data + ")").attr("disabled","disabled");

【问题讨论】:

  • 您能解释一下变量data 的样子以及它的设置位置吗?
  • 其实看起来像: var data = ;看起来:31/8/2018,30/9/2018 在数据库中

标签: javascript php jquery arrays


【解决方案1】:

假设 data 是一个有效的 JavaScript 数组,您可以迭代每个值并禁用包含该值的 option

// <?php echo json_encode($existing_month);
var data = "31/8/2018,30/9/2018";

$.each(data.split(','), function(index, value) {
  $('select > option').filter(function () {
  	return $(this).val() == value
  }).prop('disabled', true)
})
option[disabled] {
  color: #ccc;
  cursor: not-allowed
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<select class="form-control" multiple="" name="month[]" id="month">
   <option value="31/8/2018">  1 @ 31/8/2018   </option>
   <option value="30/9/2018">  2 @ 30/9/2018   </option>
   <option value="31/10/2018"> 3 @ 31/10/2018  </option>
   <option value="30/11/2018"> 4 @ 30/11/2018  </option>
   <option value="31/12/2018"> 5 @ 31/12/2018  </option>
</select>

编辑:从您的评论看来,您的变量是一个逗号分隔的字符串,因此我们需要使用逗号作为分隔符来拆分字符串,从而生成一个数组。

【讨论】:

  • 它工作得很好谢谢,但我的数据库包含 Like: 31/8/2018,30/9/2018 Not Like: '31/8/2018','30/9/2018' 你可以做点什么其实我是java脚本的新手所以...
  • 在你的 php 中 json_encode($existing_month)$existing_month 一个数组或字符串还是...?
  • 一个数组,通过Selecting多选框插入,然后使用implode(',', $_POST['month']);功能。
  • 所以原始值实际上是一个逗号分隔的字符串,当从 PHP 回显时看起来像 31/8/2018,30/9/2018?没关系。我会相应地更新代码。
【解决方案2】:

documentation 开始,“包含”只能是文本。使用 JQuery 的一个快速答案是使用相同的逻辑迭代数组。

const data = ["31/8/2018", "30/9/2018"]
data.forEach(entry => {
  $("select option:contains( " + entry + ")").attr("disabled", "disabled");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<select class="form-control" multiple="" name="month[]" id="month">
  <option value="31/8/2018"> 1 @ 31/8/2018 </option>
  <option value="30/9/2018"> 2 @ 30/9/2018 </option>
  <option value="31/10/2018"> 3 @ 31/10/2018 </option>
  <option value="30/11/2018"> 4 @ 30/11/2018 </option>
  <option value="31/12/2018"> 5 @ 31/12/2018 </option>
</select>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 2021-12-11
    • 1970-01-01
    • 2021-05-27
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多