问题
Here is my option code and text box
<select id="sel" class="form-control input-lg" data-live-search="true">
<option value="">-- Select Your Country--</option>
</select><br/><br/><br/>
<input type = "text" id = "txtName" class="form-control input-lg" />
</div>
This is my JSON code
[
{
"country":"First",
"coupon":["1","10","11"]
},
{
"country":"Second",
"coupon":"2"
},
{
"country":"third",
"coupon":"3"
},
{
"country":"fourth",
"coupon":"4"
},
{
"country":"fifth",
"coupon":"5"
}
]
i have populated JSON to dropdown and shown to text (input) box
$('#sel').append('<option value="' + value.coupon + '">' + value.country + '</option>');
$('#sel').change(function () {
var str = $("#sel").val();
$("#txtName").val(str);
}
What i need is when i select the value "First" in dropdown which has 3 numbers ["1","10","11"] i need to show either "1" or "10" or "11" at a time in text box randomly.Also the values in the textbox must be unique on each search and when all numbers are shown it must display a text message "No Coupon" in text box.
I used below code to randomly generate it but i couldn't get desired result.Could anyone help me ?
Array.prototype.random = function (length) {
return this[Math.floor((Math.random()*length))];
}
// var randomcoupon = value.coupon.random(value.coupon.length);
回答1:
One way would be to keep a reference of the list (firstCouponOptions
as in the below mentioned code) and each time a random value is fetched from firstCouponOptions
show it in the "text box" and remove the value from the firstCouponOptions
list at the same time. When it is empty, show "No coupon" message.
const options = [
{ "country": "First", "coupon": ["1", "10", "11"] },
{ "country": "Second", "coupon": "2" },
{ "country": "third", "coupon": "3" },
{ "country": "fourth", "coupon": "4" },
{ "country": "fifth", "coupon": "5" }
];
function getRandomValueFromList(list) {
const randomeIndex = Math.floor(Math.random() * (list.length));
return list[randomeIndex];
}
$(function() {
const firstCouponOptions = options[0].coupon;
options.forEach((value) => {
$('#sel')
.append('<option value="' + value.coupon + '">' + value.country + '</option>');
});
$('#sel').change(function() {
let str = $("#sel").val();
if ($("#sel option:selected").text() === 'First') {
if (firstCouponOptions.length) {
str = getRandomValueFromList(firstCouponOptions);
firstCouponOptions.splice(firstCouponOptions.indexOf(str), 1);
} else {
str = "No Coupon";
}
}
console.log(str);
$("#txtName").val(str);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="sel" class="form-control input-lg" data-live-search="true">
<option value="">-- Select Your Country--</option>
</select>
<input type="text" id="txtName" class="form-control input-lg" />
来源:https://stackoverflow.com/questions/62321623/json-get-unique-random-values-from-array-to-text-input-html-and-show-a-text-when