मेरे पास नीचे दिया गया एक बहु-चयन बॉक्स है: कृपया पहले उसे देखें।

मेरा कोड:

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

केवल चुनिंदा विकल्प को अक्षम करने में मदद करता है यदि डेटा में केवल एक मान हो (सरणी में नहीं)

यहाँ समस्या है:

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


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

तो हो सकता है, हमें एक लूप की आवश्यकता हो जो डेटा की जांच करे [1] == पहला विकल्प फिर दूसरा फिर तीसरा आदि यदि मान मेल खाते हैं, तो वह मान अक्षम हो जाएगा।

फिर डेटा की जाँच करें [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");
1
Anmol singh 12 जिंदा 2019, 22:34

2 जवाब

सबसे बढ़िया उत्तर

मान लें कि डेटा एक मान्य जावास्क्रिप्ट सरणी है, तो आप प्रत्येक मान को पुनरावृत्त कर सकते हैं और उस मान वाले 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>

संपादित करें: आपकी टिप्पणी से ऐसा प्रतीत होता है कि आपका चर एक अल्पविराम सीमांकित स्ट्रिंग है, इसलिए हमें अल्पविराम को सीमांकक के रूप में उपयोग करके स्ट्रिंग को विभाजित करने की आवश्यकता होगी जिसके परिणामस्वरूप एक सरणी होगी।

3
Cue 12 जिंदा 2019, 23:13

दस्तावेज़ीकरण से, "contains" केवल टेक्स्ट हो सकता है। 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>
0
GenericUser 12 जिंदा 2019, 22:54