#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)
Обратите внимание, что вам не нужен ‘#’ в начале.