Каков наилучший способ сохранить эти данные в обработчиках событий Javascript, используя jQuery? - PullRequest
0 голосов
/ 10 марта 2009

Мой код предназначен для замены радиокнопок динамическими и позволяет щелкать как метку, так и новый динамический радиоэлемент, чтобы переключать состояние скрытого с помощью радиоблока CSS.

Мне нужно отправить questions.checkAnswer() три параметра, и они определены в этих циклах инициации. Однако я всегда получаю последними последние значения, когда цикл завершает итерацию. В прошлом я создавал фиктивные элементы и другие вещи, которые не подходили для хранения «временных» ценностей в качестве информационного хука для Javascript.

Вот что у меня есть

init: function() {
        // set up handlers

       moduleIndex = $('input[name=module]').val();

       $('#questions-form ul').each(function() {

            questionIndex = $('fieldset').index($(this).parents('fieldset'));

            $('li', this).each(function() {

                answerIndex = $('li', $(this).parent()).index(this);

                prettyRadio = $('<span class="pretty-radio">' + (answerIndex + 1) + '</span>');

                radio = $('input[type=radio]', this);

                radio.after(prettyRadio);

                $(radio).bind('change', function() {
                    $('.pretty-radio', $(this).parent().parent()).removeClass('selected');

                    $(this).next('.pretty-radio').addClass('selected');

                    questions.checkAnswer(moduleIndex, questionIndex, answerIndex);

                });

                prettyRadio.bind('click', function() {

                    $('.pretty-radio', $(this).parent().parent()).removeClass('selected');

                    $(this).addClass('selected').prev('input').attr({checked: true});


                });

                $('label', this).bind('click', function() { 


                    $(radio).trigger('change');
                    questions.checkAnswer(moduleIndex, questionIndex, answerIndex);

                    $(this).prev('input').attr({checked: true});

                });



            });


       });
  • Это плохо, чтобы добавить атрибут притвор с Javascript, например, <li module="1" question="0" answer="6">
  • Должен ли я хранить информацию в атрибуте rel и объединять ее, например, с дефисом, и разбирать ее, когда мне это нужно?
  • Как вы решили эту проблему?
  • Я открыт для любых идей, чтобы улучшить мой код Javascript.

Спасибо всем за потраченное время.

Ответы [ 3 ]

2 голосов
/ 10 марта 2009

Это не конец света, чтобы добавить пользовательский атрибут. На самом деле, во многих случаях это наименее плохой подход. Однако, если бы мне пришлось это сделать, я бы поставил перед атрибутом «data-» только для того, чтобы он соответствовал спецификациям HTML5 для пользовательских атрибутов для прямой совместимости. Таким образом, вам не придется беспокоиться об обновлении, если вы хотите получить HTML5-совместимость.

1 голос
/ 10 марта 2009

Если назначение пользовательских атрибутов полностью на стороне клиента, вы должны решить это с помощью данных jQuery, что-то вроде этого:

$ ("# yourLiID"). Data ({модуль: 1, вопрос: 0, ответ: 6});

для полной документации см. здесь

1 голос
/ 10 марта 2009

вам нужно сказать «var questionIndex» и т. Д., Иначе ваши «переменные» являются свойствами окна и имеют глобальную область видимости ...

Что касается пользовательских атрибутов, я, конечно, делал это в прошлом, но я стараюсь избегать этого, если могу. некоторые CMS и тематические системы иногда становятся несчастными, если вы делаете это с помощью интерактивных элементов, таких как текстовые области и теги ввода, и можете просто их убрать.

наконец, $ (a, b) - это то же самое, что и $ (b) .find (a) .. некоторые люди предпочитают вторую форму, потому что она более явна в том, что вы делаете.

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