Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Поведение скрипта в IE (https://javascript.ru/forum/jquery/17457-povedenie-skripta-v-ie.html)

alexkill 19.05.2011 20:15

Поведение скрипта в IE
 
Есть следующий скрипт (фрагмент кода):

$(".class_news").hover(function () {
	var str = this.id.substr(-1) // идентификатор tr-ки, на которую была наведена мышь
	$('#tr'+str).css({'background-color':'#ffffff'}); // задаем белый цвет фона
            ...
    },
        function() {
	 ...	
    });


Опера, фф отображают все верно, а вот в ИЕ скрипт выполняется только если написать определенно:
$('#tr2').css({'background-color':'#ffffff'}); // задаем белый цвет фона


Иначе скрипт отказывается выполняться в этом браузере.

В чем может быть проблема и как задать верно обращение к айдишнику в этом случае?

nikita.mmf 20.05.2011 11:24

Если я правильно понял, то this у вас уже указывает на нужный вам tr, тогда не надо мудрить с id, и пишется все намного проще
$(".class_news").hover(function () {
  $(this).toggleClass("hover");
});

И пишем следующий css
tr.hover td {
  bacground-color: #fff;
}

alexkill 20.05.2011 13:20

nikita.mmf
да, мой фейл, из кода не ясно, что я хочу, потому как я его урезал, да еще и неверно

это будет слайдер новостей. дело в том, что при наведении на нужную ячейку (которая и будет this), цвет выделенной ранее должен стать белым

и проблема именно в этой строке, возможно, неверная конструкция и можно как-то иначе записать
$('#tr'+str).css({'background-color':'#ffffff'});

nikita.mmf 20.05.2011 14:00

Приведи пожалуйста ваш html, очень сложно понять, откуда что брется

alexkill 20.05.2011 14:28

вот жава-фрагмент
<script type="text/javascript">
$(document).ready(function()
{
var curr = 0; // порядковый номер
$('#tr0').css({'background-color':'#edf1f7'}); // выделение tr-ки первой новости
<?php $act = getActNews();?>  // количество активных новостей

 $(".class_news").hover(function () { // при наведении на тр-ку, ее цвет должен смениться
	  var str = this.id.substr(-1) // последний символ айди тр-ки
	  $('#tr'+curr).css({'background-color':'#ffffff'}); // сняли выделение с предыдущей активной ячейки
	  curr = str; // определили номер выделенной
	  $(this).css({'background-color':'#edf1f7'}); // и выделили нужную
    },
        function() {
		
    });
	
});
</script>


вот хтмл, пхп

<?php			
				if(count($AllNews)){
				$i = 0;
				foreach($AllNews as $oneNews){
				$id = $oneNews->id_news;
?>
              
                <tr class="class_news" id="tr<?=$i;?>" > // вот здесь указываю класс для tr-кии и ее айдишник
                  <td style="cursor: pointer;"><table border="0" width="100%" cellpadding="0" cellspacing="0" style="margin-top:6px">
                      <tr>
                        <td ><a href=""></a></td>
                      </tr>
                    </table></td>
                </tr>
     
<? $i++; }} ?>

nikita.mmf 20.05.2011 15:53

var $activeRow = $('#tr0').addClass('active');
$(".class_news").hover(function () {
  $activeRow.removeClass("active");
  $activeRow = $(this).toggleClass('active');
})


Для изменения стилей лучшей изпользовать css-классы, и, если я не ошибаюсь, в IE проблема с заданей фона для tr, лучше делать так
.active td {
  background-color:#edf1f7;
}

alexkill 31.05.2011 16:43

nikita.mmf, спасибо за совет насчет классов, это действительно удобно.
А проблема была в неверном значении переменной в этой строке:
var str = this.id.substr(-1)


в ИЕ возвращалось не число, а все значение атрибута id.
Текущую строку заменил на
var str = this.id.charAt(2);

работает

тему, думаю, можно закрыть


Часовой пояс GMT +3, время: 15:37.