2014-10-11 7 views
0

Мне интересно, если в команде js есть встроенная команда, которая позволяет мне переключаться между двумя состояниями элемента назад и вперед.Js переключаться между двумя опциями без «if»

я для примера этот код:

mydiv.innerHTML = '<a href="#" onclick="this.innerHTML=\'Second_possible_value\';">Default value</a>'; 

Что мне нужно, чтобы переключаться между «DEFAULT_VALUE» и «Second_possible_value» на месте. Я не хочу писать целые, если {} - else {}

onclick="this.innerHTML.MagicalSwitch('Second_possible_value'||'Default_value');" 

Есть ли что-то вроде этого?

ответ

2

Вы могли бы попробовать это для 2 http://jsfiddle.net/or9d4aLk/

onclick="this.innerHTML = this.innerHTML == 'Default_value' ? 'Second_possible_value' : 'Default_value';" 

или этого в течение 3 http://jsfiddle.net/or9d4aLk/1/

onclick="this.innerHTML = this.innerHTML == 'Default_value' ? 'Second_possible_value' : this.innerHTML != 'Third_possible_value' ? 'Third_possible_value' : 'Default_value';" 
+0

Удивительно, это работает. –

+0

Ха-ха, я клянусь богом, я не видел вашего ответа и просто набрал это с моего телефона. Но опять же, если вы программируете с JS, это то, что вы делаете каждый день. Во всяком случае, просто удалил мой ответ. Слишком поздно –

+0

@GuilhermeLopes Я чувствую тебя! Вы знаете, что они говорят, великие мысли думают одинаково. – theliberalsurfer

0

У вас может быть два метода. Когда один из методов завершен, он переключает событие onclick на другой метод.

Имеют смысл?

0

В хороший способ сделать это, чтобы не использовать атрибуты событий. Вместо этого используйте правильную систему (addEventListener). Затем вы можете сделать что-то вроде этого:

var mydiv = document.getElementById ('mydiv');

(function() { // create a closure for our counting variable 
 
    var i = 0, // to count how many times this has been run 
 
    link = document.createElement('a'); 
 

 
    link.href = '#'; 
 
    mydiv.appendChild(link); // add the a element to the div 
 
    link.innerHTML = 'Default_value'; 
 

 
    link.addEventListener('click', function() { 
 
    if (i++ % 2) { // i.e. on even operations 
 
        // n.b we increment i 
 
     link.innerHTML = 'Default_value'; 
 
    } else { // i.e. on odd-numbered operations 
 
     link.innerHTML = 'Second_possible_value'; 
 
    } 
 
    }, false); 
 
}());
<div id="mydiv"></div>

Это, конечно, намного более многословен, чем встроенное решение, но оно будет иметь более высокую производительность и легче в обслуживании. Это также намного более гибко, так как я предполагаю, что ваше приложение имеет больше функциональности, чем просто изменение слов в ссылке.

+0

Да, я думал о отдельной функции, но так как уже' mydiv' был динамически создан другой функцией и другими условиями, я не хотел скомпоновать свой код. –

+0

@ Bri.H. Более сложный не всегда означает худшее. Через два года вы пробуйте отлаживать динамически созданные встроенные атрибуты! Это было бы, конечно, менее сложно, если бы вам не пришлось динамически генерировать элемент 'a'. – lonesomeday

Смежные вопросы