2015-02-02 2 views
1

Возможно ли иметь одно событие onClick, при первом щелчке он использует одну функцию, а второй - другой?Нажмите дважды на два события onClick

например.

<p id="demo" onclick="goRed(), goBlue()">Click me to change my text color.</p> 

<script> 
    function goRed() { 
     document.getElementById("demo").style.color = "red"; 
    } 
    function goBlue() { 
     document.getElementById("demo").style.color = "blue"; 
    } 
</script> 

Могу ли я сделать это так, функция OnClick использует боднул(), а затем goBlue() после второго щелчка? Thanks

+1

магазин булево или счетчик, а затем проверить его значение на клик и приращения/изменить его. –

ответ

0
<p id="demo" onclick="goRed()"> Click me to change my text color.</p> 

<script> 
    function goRed() { 
     document.getElementById("demo").style.color = "red"; 
     this.onclick = goBlue; 
    } 
    function goBlue() { 
     document.getElementById("demo").style.color = "blue"; 
     this.onclick = goRed; 
    } 
</script> 

Это сделает это. Но это не приятно. Поэтому мы можем обновить это:

Сначала применим обработчик событий. Они являются стандартом. Старайтесь избегать встроенных обработчиков событий.

document.getElementById("demo").addEventListener("click", goRed, false); 
 

 
    function goRed(e) { 
 
     this.style.color = "red"; 
 
     //this refers to the element. 
 
     this.removeEventListener("click", goRed, false); //remove the event listener 
 
     this.addEventListener("click", goBlue, false); //add the blue one. 
 
    } 
 
    function goBlue(e) { 
 
     this.style.color = "blue"; 
 
     this.removeEventListener("click", goBlue, false); //remove the event listener 
 
     this.addEventListener("click", goRed, false); //add the Red one. 
 
    }
<p id="demo" > Click me to change my text color.</p>

Я выбрал не выполнять одну функцию для изменения цвета, так как я хотел, чтобы сделать этот ответ более общий характер. Это правильный способ изменить обработчик события элемента внутри функции на другую функцию. Изменение цвета - всего лишь пример. Можно представить себе другие случаи, когда функциональная ссылка ссылки или кнопки должна быть изменена после выполнения функции.

+0

Приятный нисходящий поток без правильного объяснения и правильного кода, который отвечает на вопрос. – Mouser

3

Просто используйте одну функцию, но переключаться между разными цветами в этой функции:

function toggleColor() { 
 
    var el = document.getElementById("demo"); 
 
    
 
    if (!el.style.color || el.style.color == "blue") 
 
    el.style.color = "red"; 
 
    
 
    else 
 
    el.style.color = "blue"; 
 
}
<p id="demo" onclick="toggleColor()">Click me to change my text color.</p>

Здесь мы устанавливаем color на «красный», если элемента color в настоящее время «синий» или еще не установлен. В противном случае мы устанавливаем его на «синий».

+0

Почему вы устанавливаете обработчик событий в строку, а не через addEventListener? – Mouser

+0

@Mouser, потому что это не вопрос о том, как я должен переписать мою встроенную функцию onclick. Я ответил на заданный вопрос, но решил не выходить за рамки служебного долга, поскольку вопрос, на который вы хотите, чтобы я отвечал, ответил здесь бесчисленное количество раз. –

+0

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

0

также вы можете сделать это с помощью switch

function toggleColour() { 
var color=document.getElementById("demo").style.color; 
switch(color){ 
case "red": 
     color.style.color = "blue"; 
     break; 
case "blue": 
     color.style.color = "red"; 
     break; 
default : 
    console.log("the color are not posible to change"); 
    break; 
    } 
} 

добавить это в ваш HTML файл

<p id="demo" onclick="toggleColour()">Click me to change my text color.</p> 
Смежные вопросы