データソースにknockoutjsでkendouiウィジェットを使用しています。StartClientFromWebEnabled
観察可能な変数にデータバインドされたチェックボックスがあります。入力テキスト ボックスは、チェックボックス ic がオン ( StartClientFromWebEnabled
true) の場合にのみ表示されます。入力には必須属性があります。チェックボックスがチェックされている場合にのみ、必要な検証がトリガーされるようにします。
これが私のhtmlです:
<table>
<tr>
<td><label for="startClientFromWebEnabled">Client Launch From Web:</label></td>
<td><input type="checkbox" id="startClientFromWebEnabled" name="startClientFromWebEnabled" data-bind="checked: StartClientFromWebEnabled, enable: IsEditable" onchange="startClientFromWebToggleRequiredAttribute()" /></td>
</tr>
<tr data-bind="visible: StartClientFromWebEnabled">
<td><label for="mimeType">Protocol:</label></td>
<td>
<input id="mimeType" name="mimeType" data-bind= "value: MimeType, enable: IsEditable" />
<span class="k-invalid-msg" data-for="mimeType"></span>
</td>
</tr>
</table>
onChange event
次のJavaScript関数を使用してチェックボックスを設定し、必要な属性を追加および削除するなど、いくつかのシナリオを試しました:
startClientFromWebToggleRequiredAttribute = function () {
var checkbox = document.getElementById("startClientFromWebEnabled");
var mimeType = document.getElementById("mimeType");
if (checkbox.checked) {
mimeType.setAttribute("required", "required");
}
else {
mimeType.removeAttribute("required");
}
}
問題は、アプリケーションの多くの依存プロパティに対してこの機能が必要になることです。私のオプションは、この関数をいくつかのパラメーターで汎用化し、次のような対応するパラメーター値を使用して html から呼び出すことです。
toggleRequiredAttribute = function (checkboxElement, inputElement1, inputElement2 ... ) {
var checkbox = document.getElementById(checkboxElement);
var inputElement1 = document.getElementById(inputElement1);
if (checkbox.checked) {
inputElement1.setAttribute("required", "required");
}
else {
inputElement1.removeAttribute("required");
}
}
<input type="checkbox" id="startClientFromWebEnabled" name="startClientFromWebEnabled" data-bind="checked: StartClientFromWebEnabled, enable: IsEditable" onchange="toggleRequiredAttribute('startClientFromWebEnable', 'mimeType')" />
私は本当にこのシナリオが好きではありません。ある条件が満たされた場合にのみトリガーされる条件付き検証のようなものが剣道衣にあるのだろうか。他の提案も大歓迎です。