Как мы можем использовать троичный оператор с несколькими условиями в JavaScript?

1

Приведенный ниже фрагмент кода работает, но чтобы упростить код, как мы можем использовать троичный оператор?

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;
    }
}
Теги:

5 ответов

5

Нет необходимости в троичной здесь:

function fnOnChangeType() { 
    document.getElementById("selectMessageView").disabled = document.RequestHistoryForm.strMessageType.value !== "All";
}

function fnOnChangeView() {
    document.getElementById("selectMessageType").disabled = document.RequestHistoryForm.strMessageView.value !== "";
}
2

Синтаксис троичной операции в 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;

  • 1
    И короче: document.getElementById ("selectMessageView"). Disabled =! Document.RequestHistoryForm.strMessageType.value == "Все"; ИЛИ document.getElementById ("selectMessageView"). Disabled = document.RequestHistoryForm.strMessageType.value! = "Все";
  • 0
    @ SleepyPanda: Абсолютно. Это короткое и хорошее решение. Поскольку вопрос явно упоминается о троичном операторе, я предоставил решение с троичной операцией
2

Я думаю, что вы можете сократить это, делая это;

function fnOnChangeType() {
    document.getElementById("selectMessageView").disabled = document.RequestHistoryForm.strMessageType.value !== "All";
}
function fnOnChangeView() {
    document.getElementById("selectMessageType").disabled = document.RequestHistoryForm.strMessageView.value !== "";
}
  • 1
    Вместо отрицания операции равенства вы можете просто использовать неравенство, т.е. !==
  • 0
    да или вы можете скопировать вставить мой ответ сейчас: D
1

Другой подход, который я, вероятно, не использовал бы только для двух таких наборов, но если бы их было три или более, это написать универсальную версию для повторного использования:

function enableFieldOnValue(fieldToEnable, testField, value) {
  document.getElementById(fieldToEnable).disabled = 
    document.RequestHistoryForm[testField].value == value
}

enableFieldOnValue("selectMessageView", "strMessageType", "All")
enableFieldOnValue("selectMessageType", "strMessageView", "")
0

Я думаю, что лучшее, что вы можете получить, это:

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 != "";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню