X個の行のループで作成されたテーブルがあります。各行には選択があります。私はそれぞれの選択をループしたいし、値が選択されていない場合は、関数を完全に停止し、フォームを送信しないでください。問題は、1つの行に選択された値があり、2つの行が存在しない場合、その行を送信しますが、すべての行に選択された値がない限り、送信しないことです。ここで複数の選択要素にオプションが選択されていることを確認する
は、あなたがあなたの各ループの前にチェックを追加することができ、問題の例とjsfiddle
https://jsfiddle.net/ypx91hk0/2/
コード
function save() {
let order = [];
$('select[name="statusSelect[]"]').each(function() {
let id = this[this.selectedIndex].id;
let value = this.value;
if (value === 'empty') {
console.log("empty");
$(".alertEmptySelect").show();
return;
}
order.push({id: id, status: value});
let data = JSON.stringify(order);
$.ajax({
method: 'put',
url: '',
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function(response){
$(".alertSubmitted").show("slow");
},
error: function (data) {
console.log(data);
let errorString = '';
$.each(data.responseJSON, function (key, value) {
errorString += '<li>' + value + '</li>';
});
$('.alertError').show().html(errorString);
}
});
});
}
<select name="statusSelect[]" id="statusSelect" onchange="changeColor(this, {{$product->id}})" class="form-control" required>
<option value="empty" disabled selected hidden>Please Choose...</option>
<option id={{$product->id}} value="a">A</option>
<option id={{$product->id}} value="r">R</option>
</select>
「HTML」の文書の要素の「id」は一意である必要があります。リンクされたjsfiddleで 'changeColor'がどこに定義されていますか? – guest271314
try-catchブロックの使用はどうですか?今のところ、 'break'文は' $ .each() 'に渡された関数から抜けるだけです。その結果、すべての選択ボックスをループします。 'try'ブロックの中で' save() 'を呼び出してエラーをスローすることができます。このようにして、エラーは関数呼び出しスタックを介してバブルアップし、キャッチして処理できます。 –
[重複した質問](https://stackoverflow.com/questions/45200759/) –