Приведенный ниже фрагмент кода работает, но чтобы упростить код, как мы можем использовать троичный оператор?
function fnOnChangeType() {
if (document.RequestHistoryForm.strMessageType.value=="All") {
document.getElementById("selectMessageView").disabled=false;
} else {
document.getElementById("selectMessageView").disabled=true;
}
}
function fnOnChangeView() {
if (document.RequestHistoryForm.strMessageView.value=="") {
document.getElementById("selectMessageType").disabled=false;
} else {
document.getElementById("selectMessageType").disabled=true;
}
}
Нет необходимости в троичной здесь:
function fnOnChangeType() {
document.getElementById("selectMessageView").disabled = document.RequestHistoryForm.strMessageType.value !== "All";
}
function fnOnChangeView() {
document.getElementById("selectMessageType").disabled = document.RequestHistoryForm.strMessageView.value !== "";
}
Синтаксис троичной операции в JS:
var statement = expression1 ? value1 : value2 ;
// If expression is true,then return value1,
// otherwise return value2;
Пытаться:
document.getElementById("selectMessageView").disabled = document.RequestHistoryForm.strMessageType.value=="All"? false: true
document.getElementById("selectMessageView").disabled = document.RequestHistoryForm.strMessageType.value=="All"? false: true
;
Я думаю, что вы можете сократить это, делая это;
function fnOnChangeType() {
document.getElementById("selectMessageView").disabled = document.RequestHistoryForm.strMessageType.value !== "All";
}
function fnOnChangeView() {
document.getElementById("selectMessageType").disabled = document.RequestHistoryForm.strMessageView.value !== "";
}
!==
Другой подход, который я, вероятно, не использовал бы только для двух таких наборов, но если бы их было три или более, это написать универсальную версию для повторного использования:
function enableFieldOnValue(fieldToEnable, testField, value) {
document.getElementById(fieldToEnable).disabled =
document.RequestHistoryForm[testField].value == value
}
enableFieldOnValue("selectMessageView", "strMessageType", "All")
enableFieldOnValue("selectMessageType", "strMessageView", "")
Я думаю, что лучшее, что вы можете получить, это:
fnOnChangeType = ()=>
document.getElementById("selectMessageView").disabled =
document.RequestHistoryForm.strMessageType.value != "All"
fnOnChangeView = ()=>
document.getElementById("selectMessageType").disabled =
document.RequestHistoryForm.strMessageView.value != ""
Использование тернарного оператора было бы наихудшим в этом случае, потому что вы бы удлинили функцию только ненужным ? false: true
? false: true
суффикс, когда вы просто инвертируете условие, вы можете упростить строку. Взглянуть:
fnOnChangeType = ()=>
document.getElementById("selectMessageView").disabled =
(document.RequestHistoryForm.strMessageType.value == "All" ? false : true;
fnOnChangeView = ()=>
document.getElementById("selectMessageType").disabled =
document.RequestHistoryForm.strMessageView.value == "" ? false : true;
Вы делаете его более читабельным, если помещаете объекты в переменные:
var select = document.getElementById("selectMessageView"),
requestHistoryForm = document.RequestHistoryForm;
fnOnChangeType = ()=> select.disabled = requestHistoryForm.strMessageType.value != "All";
fnOnChangeView = ()=> select.disabled = requestHistoryForm.strMessageView.value != "";