Сценарий:
У меня есть форма, которая может иметь или не иметь значение. Первоначально кнопка отправки будет отключена. Если я что-то изменяю в элементе формы, мне нужно включить кнопку отправки. Но если я изменю текстовое поле имени, которое имеет значение «SAM», на «SAM2», что включает кнопку отправки, но если я снова изменю значение имени на его исходное значение «SAM», то оно считается не тронутым, и кнопка отправки должна быть инвалиды.
Текущая реализация:
С того момента, как я использовал событие change, чтобы включить кнопку отправки, но если я верну значение назад, кнопка все еще будет включена.
Код:
HTML:
<form id="specgeneralform">
<div class="row">
<div class="col-3">
<div class="form-group">
<label for="spec-detail-outsource">Outsource</label>
@Html.DropDownListFor(m => m.OutSource, outsourcelistItems, "Please Select", new { @id = "spec-detail-outsource" })
</div>
</div>
<div class="col-3 lsc-optional-hide" id="vendor-block">
<div class="form-group">
<label for="spec-detail-vendors">Vendor</label>
@Html.DropDownListFor(m => m.VendorID, new SelectList(Model.listVendors, "VendorID", "VendorName"), "Please Select", new { @id = "spec-detail-vendors" })
</div>
</div>
<div class="col-3 lsc-optional-hide" id="plant-block">
<div class="form-group">
<label for="spec-detail-plant">Plant</label>
@Html.DropDownListFor(m => m.PlantID, new SelectList(Model.listPlants, "PlantID", "PlantName"), "Please Select", new { @id = "spec-detail-plant" })
</div>
</div>
<div class="col-3 lsc-optional-hide" id="dsc-block">
<div class="form-group">
<label for="spec-detail-dsclocation">DSC Location</label>
@Html.DropDownListFor(m => m.DscLocationID, new SelectList(Model.listDSCLocations, "PlantID", "PlantName"), "Please Select", new { @id = "spec-detail-dsclocation" })
@Html.HiddenFor(x => x.DscLocationID)
</div>
</div>
<div class="col-3 lsc-optional-hide" id="cost-block">
<div class="form-group">
<label for="spec-detail-cost">Cost</label>
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">$</span>
</div>
@Html.TextBoxFor(x => x.Cost, new { @class = "form-control small" })
<div class="input-group-append">
@Html.DropDownListFor(m => m.CostUOM, costuomlistItems, "Please Select", new { @id = "spec-detail-unit" })
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-group">
<label for="comment">Comments</label>
@Html.TextAreaFor(x => x.BuyerComments, new { @class = "form-control" })
<label id="BuyerComments-error" class="error invalid-feedback" for="BuyerComments">Comments must not be more than 1000 characters</label>
</div>
</div>
</div>
<div class="row" style="padding-bottom: 15px;">
<div class="col-12">
<button id="spec-detail-general-save" type="button" class="btn lsc-btn-primary float-right" disabled="disabled">SAVE CHANGES</button>
</div>
</div>
</form>
JS:
$(":input").change(function () {
if ($("#specgeneralform").valid()) {
unsaved = true;
$("#spec-detail-general-save").prop("disabled", false);
}
else {
unsaved = false;
$("#spec-detail-general-save").prop("disabled", true);
}
});
Посоветуйте, пожалуйста, какой лучший способ сделать это?
ОБНОВЛЕНИЕ # 1
Я опробовал решение @ Takit-Isy, оно сработало для всех элементов, кроме этого
<tr>
<td>Spec Confirmed:</td>
<td>
<label class="switch">
@Html.CheckBoxFor(x => x.SpecConfirmed)
<span class="slider round"></span>
</label>
</td>
</tr>
<tr>
<td>MDM Override:</td>
<td>
<label class="switch">
@Html.CheckBoxFor(x => x.IsOverride)
<span class="slider round"></span>
</label>
</td>
</tr>
поэтому я установил флажок, как этот, который не работает, но остальные работают отлично.
![enter image description here](https://i.stack.imgur.com/s8H4c.png)