Вы могли бы сделать что-то вроде этого:
<div id="div" onmouseover="over_div()" onmouseout="out_div()" onclick="click_div()" style="width:100px; height:100px; border:2px solid black"></div>
<script type="text/javascript">
var isClicked = false;
function click_div(){
isClicked = true;
document.getElementById("div").style.backgroundColor="red";
}
function over_div(){
if(!isClicked)
document.getElementById("div").style.backgroundColor="green";
}
function out_div(){
if(!isClicked)
document.getElementById("div").style.backgroundColor="white";
isClicked = false;
}
</script>
Однако использование глобальной переменной является плохой практикой. Если вы понимаете концепцию закрытия, вы можете использовать что-то вроде этого, вместо:
<div id="div" style="width:100px; height:100px; border:2px solid black"></div>
<script type="text/javascript">
(function()
{
var div = document.getElementById("div");
var isClicked = false;
div.addEventListener("click", function() {
div.style.backgroundColor = "red";
isClicked = true;
});
div.addEventListener("mouseover", function() {
if(!isClicked)
div.style.backgroundColor = "green";
});
div .addEventListener("mouseout", function() {
if(!isClicked)
div.style.backgroundColor = "white";
isClicked = false;
});
}
)();
</script>
Используя это, div
и isClicked
переменные не будут находиться в противоречии с другой переменной, которая может иметь такое же имя в коде ,
Вы должны установить переменную isClicked в значение false, когда мышь покидает div, чтобы гарантировать, что событие может быть запущено снова, если мышь снова наступит позже. См. Мое решение, например. – Scalpweb
@Scalpweb: это зависит. Возможно, это не так, и OP хочет полностью отключить стиль over/out. – Krasimir
Правда. Но он говорит: «Когда вы нажмете на div, на него не повлияет наведение». Поэтому я бы предположил, что он не хочет полностью деактивировать событие. Кроме того, вы должны также использовать метод self-invokating, чтобы использовать закрытие и избегать конфликтов глобальных var. – Scalpweb