Reputation:
i tried this method to make a system for users to select their desire ranked and i got stuck into jquery when find from 2 select inputs same selected by user, for example here is what i did.
And now if user from currently ranked select SILVER 3 on second select i want to block the user to select SILVER 2, SILVER 1, etc...
$('select').change(function(){
var sum = 0;
$('select :selected').each(function() {
sum += Number($(this).val());
});
$("#total").html(sum);
$('input[name=amount]').val(sum);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Your RANK</p>
<select name='anch1'>
<option value='10'>Silver 1</option>
<option value='20'>Silver 2</option>
<option value='30'>Silver 3</option>
<option value='40'>Silver 4</option>
<option value='50'>Silver Elite</option>
<option value='60'>Silver Elite Master</option>
<option value='70'>Gold Nova 1</option>
<option value='80'>Gold Nova 2</option>
<option value='90'>Gold Nova 3</option>
<option value='100'>Gold Nova Master</option>
<option value='110'>Master Guardian</option>
<option value='120'>Master Guardian 2</option>
<option value='130'>Master Guardian Elite</option>
<option value="140">Distinguished Master Guardian</option>
<option value="150">Legendary Eagle</option>
<option value="160">Legendary Eagle Master</option>
<option value="170">Supreme master First Class</option>
</select>
<p>Desire Rank</p>
<select name='anch2'>
<option value='10'>Silver 1</option>
<option value='20'>Silver 2</option>
<option value='30'>Silver 3</option>
<option value='40'>Silver 4</option>
<option value='50'>Silver Elite</option>
<option value='60'>Silver Elite Master</option>
<option value='70'>Gold Nova 1</option>
<option value='80'>Gold Nova 2</option>
<option value='90'>Gold Nova 3</option>
<option value='100'>Gold Nova Master</option>
<option value='110'>Master Guardian</option>
<option value='120'>Master Guardian 2</option>
<option value='130'>Master Guardian Elite</option>
<option value="140">Distinguished Master Guardian</option>
<option value="150">Legendary Eagle</option>
<option value="160">Legendary Eagle Master</option>
<option value="170">Supreme master First Class</option>
<option value="180">The Global Elite</option>
</select>
<p id="total">total: </p>
Upvotes: 0
Views: 33
Reputation: 27041
I think you are looking for something like this, but it might be a little off what you need but try it:
$('select[name^="anch"]').change(function() {
var sum = 0;
$('select[name^="anch"] :selected').each(function() {
sum += Number($(this).val());
});
$("#total").html(sum);
$('input[name=amount]').val(sum);
var n1 = $('select[name="anch1"]').val();
if (n1 != 10) {
$('select[name="anch2"] option').removeAttr('disabled');
var o2 = $('select[name="anch2"] option').filter(function() {
return this.value <= n1
});
$(o2).attr('disabled', 'disabled');
}
});
Working Demo
$('select[name^="anch"]').change(function() {
var sum = 0;
$('select[name^="anch"] :selected').each(function() {
sum += Number($(this).val());
});
$("#total").html(sum);
$('input[name=amount]').val(sum);
var n1 = $('select[name="anch1"]').val();
if (n1 != 10) {
$('select[name="anch2"] option').removeAttr('disabled');
var o2 = $('select[name="anch2"] option').filter(function() {
return this.value <= n1
});
$(o2).attr('disabled', 'disabled');
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Your RANK</p>
<select name='anch1'>
<option value='10'>Silver 1</option>
<option value='20'>Silver 2</option>
<option value='30'>Silver 3</option>
<option value='40'>Silver 4</option>
<option value='50'>Silver Elite</option>
<option value='60'>Silver Elite Master</option>
<option value='70'>Gold Nova 1</option>
<option value='80'>Gold Nova 2</option>
<option value='90'>Gold Nova 3</option>
<option value='100'>Gold Nova Master</option>
<option value='110'>Master Guardian</option>
<option value='120'>Master Guardian 2</option>
<option value='130'>Master Guardian Elite</option>
<option value="140">Distinguished Master Guardian</option>
<option value="150">Legendary Eagle</option>
<option value="160">Legendary Eagle Master</option>
<option value="170">Supreme master First Class</option>
</select>
<p>Desire Rank</p>
<select name='anch2'>
<option value='10'>Silver 1</option>
<option value='20'>Silver 2</option>
<option value='30'>Silver 3</option>
<option value='40'>Silver 4</option>
<option value='50'>Silver Elite</option>
<option value='60'>Silver Elite Master</option>
<option value='70'>Gold Nova 1</option>
<option value='80'>Gold Nova 2</option>
<option value='90'>Gold Nova 3</option>
<option value='100'>Gold Nova Master</option>
<option value='110'>Master Guardian</option>
<option value='120'>Master Guardian 2</option>
<option value='130'>Master Guardian Elite</option>
<option value="140">Distinguished Master Guardian</option>
<option value="150">Legendary Eagle</option>
<option value="160">Legendary Eagle Master</option>
<option value="170">Supreme master First Class</option>
<option value="180">The Global Elite</option>
</select>
<p id="total">total: </p>
Upvotes: 3
Reputation: 121
I think you can set an "onchange" event handler for the first select (you can distinguish them by using an ID, or even with the name). This handler must delete all the options of the second select and only add them with value > (greater than) the actual selected option. You can have all the options in an array for example (I think they are static and they are not coming from another data source like an endpoint of an API).
Please let me know if you understood what I mean. I don't have the tools now to show you the code.
Thank you!
Upvotes: 0