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

На моей странице у меня есть выпадающий список выбора со значением по умолчанию (пусто). Когда пользователь выбирает запись, отображается соответствующая форма для этого типа записи.

Пара проблем ..

  1. Код не СУХОЙ и кажется более многословным, чем должен быть, поэтому его трудно обслуживать / расширять.
  2. Когда пользователь выбирает что-то, заполняет форму, переходит на следующую страницу, а затем нажимает кнопку «Назад», поле выбора предварительно выбирается по своему выбору, но, поскольку не было события .change(), событие Поле формы не отображается. Они должны выбрать другой <option>, а затем вернуться к своему первоначальному выбору, чтобы вернуть свой форум.

Вот код:

<script type="text/javascript">
    $(document).ready(function(){

        $('#select_type').change(function () {
            $('fieldset').css('display','none'); # hide all the forms on the page
            var selectval = $('#select_type').val();
            if (selectval == 'instance')
            {
                $('#instance').toggle();
            }
            if (selectval == 'mob')
            {
                $('#mob').toggle();
            }
            if (selectval == 'dailyquest')
            {
                $('#dailyquest').toggle();
            }
            if (selectval == 'repeatablequest')
            {
                $('#repeatablequest').toggle();
            }
            if (selectval == 'zonequest')
            {
                $('#zonequest').toggle();
            }
            if (selectval == 'reward')
            {
                $('#reward').toggle();
            }
        });

    });
</script>

Помогите JS гуру SO!

Ответы [ 4 ]

7 голосов
/ 03 января 2009

Вместо нескольких предложений IF вы можете выполнять итерацию по массиву значений. Но в этом случае, если нет других требований, просто:

$(document).ready(function(){
     var select = $('#select_type');
     $('#' + select.val()).toggle(); // Toggle the preset value
     select.change(function () {
         $('fieldset').css('display','none');
         $('#' + $(this).val()).toggle();
     });
});

должно быть достаточно.

5 голосов
/ 03 января 2009
$(document).ready(function() {
  $("#select_type").change(function () {
    $("fieldset").css("display", "none");
    $("#" + $(this).val()).toggle();
  }).change();
});
0 голосов
/ 03 января 2009

Я, вероятно, не стал бы использовать поле выбора, поскольку поля выбора являются хорошим выбором, только когда параметры известны пользователю до того, как они опускаются. Никакое загадочное мясо не допускается. Вот хорошая статья о выбор зависимых входов .

Мое мнение об этой проблеме: * Должен быть показан только раздел, связанный с выбранным параметром, поэтому я не хочу использовать переключатель.

$(function(){
  var sel = $("#select_type");
  $("#"+sel.val()).show();
  sel.change(function(){
    $(this).children("option").each(function(){
      $("#"+this.value)[this.selected ? "show" : "hide"]();
    });
  });
});
0 голосов
/ 03 января 2009
  1. Вы можете изменить все эти операторы if на некоторые или (||) выражения.
  2. В ready () вы можете проверить, имеют ли поля значение по умолчанию. Если нет, то вы можете вручную вызвать change ().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...