У меня черный текст, который при двойном щелчке меняет цвет. Я хочу, чтобы он мог сменить цвет на двойной щелчок. Прямо сейчас у меня есть:

<script>
<h1 id="color"> I CHANGE COLORS! </h1>
<a href="javascript:void(0)" ondblclick="
        counter++;
        if(counter%2==1){color()} else {black()}
        ">Double click here</a>
</script>

Вызваны две функции: color() и black(). Есть ли в любом случае я могу использовать переключатель вместо этого, если-еще с Javascript?

2
Jay 29 Янв 2013 в 05:41

5 ответов

Лучший ответ

Сохраните функции в глобально доступном объекте:

functions = {};
functions[true] = black;
functions[false] = color;

black = true

А затем инвертировать ваш государственный флаг:

<a href="javascript:void(0)" ondblclick="
        black = !black;
        functions[black]();
        ">Double click here</a>

Хотя это удовлетворяет вашим очень произвольным требованиям, это отвратительное решение.

1
meagar 29 Янв 2013 в 01:53

Вы можете использовать одно из свойств элемента anchor для переноса значения переключателя для вас (например, это ID). Тогда вы сможете включить весь необходимый код в одно событие ondoubleclick без необходимости заранее объявлять переменную переключения:

<h1 id="color"> I CHANGE COLORS! </h1>
<script>
  function black(id) { document.getElementById(id).style.color = 'black' }
  function red(id)  { document.getElementById(id).style.color = 'red' }
</script>
<a id="toggle_uninitialized" href="javascript:void(0)" ondblclick="(this.id=='toggled') ? this.id='not_toggled' : this.id='toggled';(this.id=='toggled') ? red('color') : black('color');">Double click here</a>

обновленная скрипка

РЕДАКТИРОВАТЬ . Измененные идентификаторы не содержат пробелов. Очевидно, что это решение может быть принято для использования любых других существующих anchor element атрибутов, которые в противном случае не нужны (не используются) в вашем коде в качестве переключателя.

1
TildalWave 29 Янв 2013 в 02:38

Вы можете использовать троичный оператор:

this.style.color = this.style.color == '#000000' ? '#ff0000' : '#000000';

(желательно не во встроенном обработчике событий)

0
bfavaretto 29 Янв 2013 в 01:49

http://jsfiddle.net/t6BUE/

<style> .black {color: black;} .red {color: red;}</style>
<div id="color" class="black">test</div>

<input type="button" name="button" value="Change"
onClick="document.getElementById('color').className = (document.getElementById('color').className=='red') ? 'black' : 'red';">

Я бы порекомендовал не проверять значение style.color, так как, очевидно, браузеры могут изменить это значение. (Я только что проверил на Chrome, и он изменил # FF0000 на rgb (255,0,0); это делает проверку на это значение непредсказуемой в разных браузерах. Я рекомендую вместо этого проверять класс.

0
teynon 29 Янв 2013 в 01:53
ondblclick='(toggle = ! toggle) ? alert("1") : alert("2");'>Double click here</a>

Перед этим вам нужно установить переключатель на true или false

0
meagar 29 Янв 2013 в 02:08