2015-08-25 2 views
4

Я пытаюсь создать одну функцию, которая изменит класс одного из трех элементов, когда мышь перейдет через этот конкретный элемент (и только тот элемент).Идентификация элемента moused в функции onmouseover

Однако всякий раз, когда я нажимаю над любым элементом, класс изменяется для всех трех. Зачем? Вот что я сделал:

< - HTML, ->

<p class="font1" id="change4_1" onmouseover="Q4()"> Menu1</p> 
<p class="font1" id="change4_2" onmouseover="Q4()"> Menu2</p> 
<p class="font1" id="change4_3" onmouseover="Q4()"> Menu3</p> 

/* CSS-*/

p.font1 { 
    color:blue; 
    white-space:nowrap; 
    display: inline-block; 
} 
p.font2 { 
    color:#2E2E2E; 
    white-space:nowrap; 
    display: inline-block; 
} 

// Javascript //

function Q4() { 
    var NAME1 = document.getElementById("change4_1"); 
    if (NAME1.mouseover = true) { 
     NAME1.className = "font2"; 
    } 

    var NAME2 = document.getElementById("change4_2"); 
    if (NAME2.mouseover = true) { 
     NAME2.className = "font2"; 
    } 

    var NAME3 = document.getElementById("change4_3"); 
    if (NAME3.mouseover = true) { 
     NAME3.className = "font2"; 
    } 
} 

Я уверен, что это проблема JavaScript, но я все равно включил все.

ответ

4

Для сравнения: ==(Equality Operator) или ===(Strict Equality Operator).

Вы не сравниваете значение в инструкции if. Вы присваиваете переменной значение true. Для сравнения значения в операторе if используйте оператор == или ===.

if (NAME1.mouseover=true) 

Должно быть

if (NAME1.mouseover == true) 

Или

if (NAME1.mouseover === true) 

Вам не нужно Javascript, чтобы изменить стили при наведении курсора мыши, вы можете воспользоваться CSS :hover класса.

p.font1 { 
 
    color: blue; 
 
    white-space: nowrap; 
 
    display: inline-block; 
 
} 
 
p.font1:hover { 
 
    color: #2E2E2E; 
 
}
<p class="font1" id="change4_1">Menu1</p> 
 
<p class="font1" id="change4_2">Menu2</p> 
 
<p class="font1" id="change4_3">Menu3</p>

Update

Как ваш код JS является недействительным, NAME1.mouseover = true, вы можете использовать следующий код, если вы хотите использовать JS, чтобы изменить некоторые свойства HTML элемента при наведении курсора мыши (Я по-прежнему рекомендую использовать подход CSS)

function Q4(el) { 
 
    el.classList.add('font2'); 
 
}
p.font1 { 
 
    color: blue; 
 
    white-space: nowrap; 
 
    display: inline-block; 
 
} 
 
p.font2 { 
 
    color: #2E2E2E; 
 
    white-space: nowrap; 
 
    display: inline-block; 
 
}
<p class="font1" id="change4_1" onmouseover="Q4(this)">Menu1</p> 
 
<p class="font1" id="change4_2" onmouseover="Q4(this)">Menu2</p> 
 
<p class="font1" id="change4_3" onmouseover="Q4(this)">Menu3</p>

+0

@TGreenwood Если вы внимательно прочитали мой ответ, я также добавил ответ на javascript. Если вам нужно добавить класс, используйте первый подход, если вы просто хотите стирать при наведении, используйте подход CSS – Tushar

+0

Я не понимаю. 'if (NAME1.mouseover == true)' будет возвращать значение свойства 'mouseover' на' NAME1', что отличается от вопроса о том, является ли элемент NAME1 элементом, который мышь наложила. –

+0

@torazaburo Проверьте обновление в ответ – Tushar

2

Вы назначая mouseover свойство элемента в true в каждом, если заявление. Это успешно и соответствует равенству true, поэтому выполняется инструкция if. Вы не можете проверить свойство элемента mouseover, потому что это не часть DOM для элементов.

Самый простой способ сделать то, что вы хотите изменить ваш CSS-х p.font2 к p.font1:hover

Однако, если вы пытаетесь узнать о запуска функции JavaScript с наведении курсора попробуйте передать аргумент this функции OnMouseOver, IE Q4(this). Затем функция может ссылаться на элемент, который был обработан более прямым.

<html><head> 
 
<style> 
 
p.font1 { 
 
    color: blue; 
 
    white-space: nowrap; 
 
    display: inline-block; 
 
} 
 
p.font2 { 
 
    color: #2E2E2E; 
 
    white-space: nowrap; 
 
    display: inline-block; 
 
} 
 
</style> 
 
<script> 
 
function Q4(element) 
 
{ 
 
    element.className='font2'; 
 
} 
 
</script> 
 
</head> 
 
<body> 
 
<p class="font1" id="change4_1" onmouseover="Q4(this)"> Menu1</p> 
 
<p class="font1" id="change4_2" onmouseover="Q4(this)"> Menu2</p> 
 
<p class="font1" id="change4_3" onmouseover="Q4(this)"> Menu3</p> 
 
</body> 
 
</html>

Это не изменит стиль обратно на мышь из хотя. Вы тоже можете легко написать этот атрибут.

Так что сводится к одной строке кода, вы можете просто изменить его на onmouseover="this.className='font2';"

Большинство людей добавляющих обработчики событий JavaScript ветер, используя нечто вроде jQuery, чтобы помочь им держать сценарий отдельно от разметки (КСС только :hover селектор делает тоже). Я показал, что here и ниже:

<html><head> 
 
<style> 
 
p.font1 { 
 
    color: blue; 
 
    white-space: nowrap; 
 
    display: inline-block; 
 
} 
 
p.font2 { 
 
    color:#2E2E2E; 
 
} 
 
</style> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"> 
 
</script> 
 
<script> 
 
$(document).ready(function() { 
 
    $("p.font1").on({ 
 
     "mouseover": function() { 
 
      console.log("hovered!"); 
 
      var elem = $(this); 
 
      elem.addClass("font2"); 
 
     }, 
 
     "mouseout": function() { 
 
      console.log("unhovered!"); 
 
      var elem = $(this); 
 
      elem.removeClass("font2"); 
 
     } 
 
    }); 
 
}); 
 

 
</script> 
 
</head> 
 
<body> 
 
<p class="font1" id="change4_1"> Menu1</p> 
 
<p class="font1" id="change4_2"> Menu2</p> 
 
<p class="font1" id="change4_3"> Menu3</p> 
 
</body> 
 
</html>

Что это, кроме загрузки библиотеки JQuery и привязки его к $, есть, когда документ загружен и готов, он выбирает все элементы типа p с классом font1 и добавляет к ним функции обработчика событий для события mouseover и mouseout. Эти функции, в свою очередь, регистрируются на консоли JavaScript при запуске (полезно, когда вы отлаживаете часть своей работы), получите ссылочный элемент, на котором было инициировано событие, а затем добавьте или удалите имя класса для атрибута класса элементов. Таким образом, вы увидите изменение класса тега p от "font1" до "font1 font2" и обратно. Вот почему font2 css изменяется только для переопределения специально измененного цвета.

Надеюсь, это лучше объяснит, что происходило в вашем примере, и что с этим делать.

+0

Это очень помогло, спасибо! 'Q4 (this)' является тем, который я не знал, и добавлением 'element' внутри тега функции в сочетании с' element.className = 'font2'; 'решил мою проблему. Метод CSS наиболее эффективен, но это было упражнение для изучения моих навыков Java (или их отсутствия) больше всего. Большое спасибо –

+0

@TGreenwood Я рад, что это помогло; поэтому, чтобы облегчить вам отслеживание полученных подходов: тег функции называется параметром, а в случае JavaScript вы можете использовать любое слово, которое не является зарезервированным словом (это похоже на слово «функция» или «если», также «это»). 'this' является очень полезным ключевым словом: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this – dlamblin

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