Jquery: переменная в качестве селектора идентификаторов не работает

#jquery #jquery-selectors #global-variables

#jquery #jquery-селекторы #глобальные переменные

Вопрос:

Хорошо, вот мой код:

 $tabularID = 0;
$('a.swfselector').live('mouseover', function(event) {
            $tabularID= $(this).parent().attr('id');
            $(this).parent().children().not(this).find('.tab').each(function() {
                      $(this).fadeTo(100, 0.4)
            })
            $(this).find('.tab').each(function() {
                      $(this).fadeTo(100,1)
            })

    });
$('#'   $tabularID).live('mouseleave', function(event) {
            alert($tabularID);
            $(this).children().find('.tab').each(function() {
                      $(this).fadeTo(100,1)
            })

    });
  

Jquery не нравится этот селектор:

 $('#'   $tabularID)
  

Хотя, если я изменю ее на:

 $('#27')
  

Он отлично предупреждает мою переменную $ tabularID, поэтому я знаю, что это не та переменная, которая неверна (вывод $ tabularID равен 27). Здесь мне нужна переменная, потому что родительский идентификатор меняется в зависимости от наведения курсора мыши.

Кто-нибудь может видеть то, чего не вижу я? вероятно, действительно очевидно.

Комментарии:

1. Не уверен, являются ли они причиной вашей проблемы, но вы не должны использовать чистые числа в качестве идентификаторов. Добавляйте к ним букву типа a27

2. Приветствую информацию, хотя это не устраняет проблему. В чем причина этого?

3. Спецификация 😉 w3.org/TR/html401/types.html#type-name Хотя я думаю, что в HTML5 это разрешено.

Ответ №1:

Ваш идентификатор должен начинаться с буквы a-z или A-Z.

Этот код $ (‘#’ $tabularID) изменяется только при первом запуске. Это означает, что ваш $ tabularID = 0.

При наведении на нее курсора мыши обновляется только значение $tabularID, но не обновляется привязка к событию этого объекта $ (‘#’ $tabularID)

Я думаю, вы можете изменить свой код следующим образом:

 $tabularID = 0;
$('a.swfselector').live('mouseover', function(event) {
            $tabularID= $(this).parent().attr('id');
            $(this).parent().children().not(this).find('.tab').each(function() {
                      $(this).fadeTo(100, 0.4)
            })
            $(this).find('.tab').each(function() {
                      $(this).fadeTo(100,1)
            })

            $('#'   $tabularID).live('mouseleave', function(event) {
                alert($tabularID);
                $(this).children().find('.tab').each(function() {
                      $(this).fadeTo(100,1)
                })

            });

    });
  

Комментарии:

1. Вы читали комментарии? OP уже пробовал это, и это не сработало. Также это работает, если идентификатор отсутствует в переменной, так что это не может быть проблемой.

2. Я думаю, что это все. Проблема в том, что вы будете повторно привязывать обработчики событий к одному и тому же элементу снова и снова. Их тоже пришлось бы удалить.

Ответ №2:

Я часто использую переменные в селекторах. И у меня все работает нормально таким образом. Просто избегайте использования идентификаторов типа ‘123’. Правила именования идентификаторов:

  • Должна начинаться с буквы A-Z или a-z
  • За ней могут следовать: буквы (A-Za-z), цифры (0-9), дефисы («-«), подчеркивания («_»), двоеточия («:») и точки («.»)
  • Значения чувствительны к регистру

Комментарии:

1. Я изменил идентификатор, чтобы соответствовать этому формату, и он все еще не работает :(.

2. Пожалуйста, разместите свой код на jsfiddle.net например. Лучше видеть не только JS-код, но и HTML-код.

3. Как уже указывалось в OP в комментарии к его вопросу, он попробовал это, и это не сработало…

4. Это очень приятно и работает намного быстрее, чем моя версия, но по какой-то причине это работает на jsfiddle, но не тогда, когда я размещаю это на своем живом сайте.

5. Работает, просто нужно заменить начало на $(document).ready() Cheers

Ответ №3:

Я также столкнулся с этой проблемой с jQuery. Но выяснилось, что обычный JavaScript DOM может обрабатывать идентификаторы, начинающиеся с чисел, если проблема в этом. В данном случае это может не помочь, но, возможно, стоит подумать, не проще ли изменить этот фрагмент кода, чем изменять способ настройки вашего идентификатора.

 document.getElementById(tabularID)
  

Обратите внимание, что вам не нужен ‘#’ в начале.

Дополнительная информация о document.getElementById