jQuery .is () в Internet Explorer 7 - PullRequest
       8

jQuery .is () в Internet Explorer 7

0 голосов
/ 03 декабря 2011

К сожалению, у меня нет выбора использовать другой браузер.

У меня следующий код работает с некоторым HTML. Проблема, я думаю, в строке 4. Internet Explorer 7 вообще ничего не делает, когда я щелкаю строку с идентификатором «yellowOne» (или любой другой строкой). Если я вычеркну .is('tr.grayheading'), то IE откроет все строки с классом yellowX. Однако мне нужны только те, у которых есть и класс yellowX, и класс grayheading.

function showTheGray($yellowSection) {  
    $theYellowClass = 'yellow' + $yellowSection;
    if ($($theYellowClass).is(':hidden')) {       
        $($theYellowClass).is('tr.grayheading').show('normal');     
    }  else { $($theYellowClass).hide('normal'); }
} 

$(document).ready(  function() {    
    $('tr#yellowHeadOne').click(       
        function($e) {         
            showTheGray('One');       
        }     
    );    
    $('tr#yellowHeadTwo').click(       
        function($e) {         
            showTheGray('Two');       
        }     
    );    
    $('tr#yellowHeadThree').click(       
        function($e) {         
            showTheGray('Three');       
        }     
    );  
});

Есть ли в IE7 проблемы с назначением элемента нескольким классам? т.е. class="yellowOne grayheading" Я выписал мои селекторы неправильно?

IE7 не нравится .is()? (Я спрашиваю, потому что строка $($theYellowClass).is(':hidden').show('normal') выдавала ошибку, отсюда мое переключение на блок if)

Ответы [ 3 ]

3 голосов
/ 03 декабря 2011

Эта точка с запятой здесь не принадлежит.Попробуйте удалить его:

if ($($theYellowClass).is(':hidden;')) {
                                  ^

Больше ошибок:

Failed to load resource: the server responded
with a status of 500 (Internal Server Error)

http://herbertlives.com/demos/table/jQuery.js
0 голосов
/ 03 декабря 2011

у тебя есть другие проблемы, приятель.Ваш селектор для желтого не правильный.попробуйте этот код, поместив свою функцию showthegrey после документа, готового к передовым методам.как правило, когда у вас есть переменная, которая начинается с $, это означает, что это элемент jquery.Я думаю, что изменение некоторых ваших имен переменных может помочь вам увидеть, что происходит более четко.Кроме того, вы должны использовать «var» для объявления ваших переменных в рамках этой функции.поскольку вы не показывали свой HTML, неясно, есть ли у вас более одного «желтого» элемента, на который вы хотите повлиять на странице, или на что вы хотите повлиять, но я собираюсь предположить, что вы простоИмеется.Кроме того, я только что понял, что понятия не имею, что вы пытаетесь сделать.

также, когда вы используете идентификатор, вам не нужно сужать его с чем-то вроде tr перед ним, как этона самом деле замедлит ваш выбор.поскольку идентификаторы уникальны, вам не нужно сужать их до определенного элемента на странице.

вы должны заметить одну вещь: .is () должен быть применен к одному элементу, и он возвращаеттолько правда или ложь.поэтому ваше применение к tr: greyheading просто не будет работать.Я думаю, что вы ищете в этой ситуации либо функцию find ('yourSelector'), которая выберет все элементы в пределах того, который вы ищете, которые соответствуют yourSelector, либо hasClass, который я реализовал ниже:

$(document).ready(  function() {    
    $('#yellowHeadOne').click(       
        function($e) {         
            showTheGray('One');       
        }     
    );    
    $('#yellowHeadTwo').click(       
        function($e) {         
            showTheGray('Two');       
        }     
    );    
    $('#yellowHeadThree').click(       
        function($e) {         
            showTheGray('Three');       
        }     
    );  
});


function showTheGray(yellowSection) {  
    var theYellowClass = 'yellow' + yellowSection;
    var $theYellowElement = $('.' + theYellowClass);

    if ($theYellowElement.is(':hidden') && $theYellowElement.hasClass('grayheading')) {       
        $theYellowElement.show('normal');     
    }  
    else { 
        $theYellowElement.hide('normal'); 
    }
} 

, поэтому я не уверен, что это именно то, что вам нужно, но, надеюсь, это поможет вам показать, где вам может потребоваться внести изменения.Что этот код будет делать, например, когда вы нажмете на yellowHeadTwo, он выберет элемент с классом yellowTwo, проверит, скрыт ли он, и если он есть, и у него есть класс grayheading, то он покажет, в противном случае он будетскрытый.

0 голосов
/ 03 декабря 2011

Если я понимаю, что вы хотите сделать правильно (аккордеоноподобный эффект):

   function showTheGray($yellowSection){

if ($('.yellow'+$yellowSection).is(':hidden')) { 
    $('.yellow'+$yellowSection).show(); 
}else{ 
$('.yellow'+$yellowSection).hide(); 
}
    }

У вас также есть ошибка где-то в вашем HTML (хотя это не связано).Это выглядит как

     ...class="blaahblah><p">&nbsp;</p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...