закрытый jscript для цикла в switchstatement - PullRequest
2 голосов
/ 20 марта 2011

заменить цикл с оператором switch как-нибудь?

Ответы [ 2 ]

4 голосов
/ 20 марта 2011

Вам не нужно перебирать все переключатели, чтобы найти нажатую.Вы можете передать выбранный элемент непосредственно в вашу функцию:

function planeChoice(element) {
    // element refers to the clicked radio button
    var plane = element.value;

    switch (plane) {
         //...
    }
}

Чтобы это работало, вы должны передать this своей функции:

<input type="radio"  name="planeButton"  value="152"
       onclick="planeChoice(this)" />

this относится кHTML-элемент, к которому вы прикрепляете обработчик события, поэтому в данном случае он ссылается на элемент <input>.


Чтобы узнать больше о событиях, я предлагаю прочитать статьи по http://quirksmode.org, начиная с Введение в события и Обработчики ранних событий .


Два предложения длядальнейшее улучшение:

(A) Вы можете использовать map (который является простым объектом в JavaScript) вместо оператора switch для определения соответствующего сообщения:

var map = {
   "152": "A small two-place-airplane for flight training",
   "172": "The smaller of two four-place airplanes"
   // ...
};

Карту также проще поддерживать (расширять).

Получив значение радиокнопки, вы можете получить доступ к сообщению с помощью:

 alert(map[plane]);

Вы не можете хранить только примитивные значения (например, строки), вы также можете сохранять функции и вызывать их, еслиВы хотите сделать более сложные вещи.Но чтобы узнать больше о функциях и о том, как их использовать, вам следует прочитать руководство по JavaScript.

(B) Вы можете использовать делегирование события вместо привязки того же обработчик событий для каждого элемента (это работает через всплывающее сообщение ).Обработчик события click присоединен к элементу <form>:

<form onclick="planeChoice(event)" ...>

Или, что еще лучше, получите ссылку на элемент формы и присоедините обработчик события с помощью JavaScript:

document.getElementById("myForm").onclick = planeChoice;

Переданный объект события содержит информацию о том, по какому элементу щелкнули:

function planeChoice (event) {
    event = event || window.event; // for IE
    var target = event.target || event.srcElement; // for IE

    if(target.type === "radio") { // if a radio button is clicked
        var plane = target.value;
        // ... further code
    }
}
0 голосов
/ 20 марта 2011

Могу ли я предложить вам попробовать использовать jQuery?Это полезная (и популярная) библиотека JavaScript, которая поможет уменьшить и упростить необходимый код.

Например, приведенный выше код можно упростить до этого в jQuery:

$('#myForm input:radio').click(function(){
    switch (this.value) {
        case "152": 
            alert("A small two-place-airplane for flight training");
            break;
        // More Options go here...
        default:
            alert("Error in JavaScript function planeChoice");
            break;
    }
});

Этотакже устранит необходимость использования обработчиков щелчков на каждой радиокнопке.

...