Должны ли эти две функции JQuery работать одинаково? - PullRequest
0 голосов
/ 09 июля 2009

Предполагая, что у меня есть две следующие функции JQuery -

Первое, что работает:

$("#myLink_931").click(function ()
{
  $(".931").toggle();
});

и второй, который не работает:

$("#myLink_931").click(function ()
{
  var class_name = $(this).attr("id").split('_')[1];
  $("."+class_name).toggle();
});

Я хочу заменить первое на второе, которое более обобщенно, но не может найти каких-либо очевидных синтаксических проблем со вторым, которые могут помешать его работе.

Полагаю, есть проблема с синтаксисом:

 "."+class_name

Это плохой синтаксис?

Ответы [ 5 ]

3 голосов
/ 09 июля 2009

Они работают одинаково.

Рабочая демоверсия

3 голосов
/ 09 июля 2009

Я создал образец страницы и поместил ваш пример кода, и он работал как ожидалось. Возможно, есть другая проблема на странице? Можете ли вы разместить ссылку на фактический сайт?

Вот код, который я использовал:

<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title></title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
    <script src="scripts/script.js" type="text/javascript"></script>
</head>
<body>
    <div id="myLink_931">Click Me</div>
  <div class="931">HI</div>
</body>
</html>

и файл сценария:

(function($) {
    $(document).ready(function() {
        $("#myLink_931").click(function() {
            var class_name = $(this).attr("id").split('_')[1];
            $("." + class_name).toggle();
        });
    });
})(jQuery);
3 голосов
/ 09 июля 2009

Для этого и нужны отладчики. Пройдите по коду и убедитесь, что class_name рассчитывается так, как вы ожидаете. Отладчик должен также позволить вам просмотреть результат "." + Имя_класса.

1 голос
/ 09 июля 2009

Возможно, вы не заключаете свой второй пример в готовый синтаксис [т.е. $(function(){ })] что означало бы, что элементы еще не были созданы в DOM?

1 голос
/ 09 июля 2009

Имена классов и идентификаторы не могут начинаться с цифр - не объясняет, почему один работает, а другой - нет. Дайте нам немного больше информации, как указано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...