Приложение викторины JQuery - используйте тег <id>для включения / выключения переменной - PullRequest
0 голосов
/ 18 марта 2011

Я пишу приложение jquery phonegap quiz и у меня есть несколько категорий, из которых пользователь может выбрать флажок.Соответствующие вопросы, относящиеся к этим категориям, затем возвращаются.Однако у меня есть два огромных оператора switch, чтобы изменить соответствующие переменные с 0 на 1, если установлен флажок для этой категории, и наоборот (эта информация используется для создания составного запроса базы данных).

Значениепеременная за флажком всегда равна 0 или 1, поэтому есть ли лучший способ сделать это?

Мой HTML-код:

<h2>Categories</h2>
      <ul class="rounded">
          <li>Cardiology<span class="toggle"><input type="checkbox" id="cardiology" /></span></li>
          <li>Respiratory<span class="toggle"><input type="checkbox" id="respiratory" /></span></li>
          <li>Gastrointestinal<span class="toggle"><input type="checkbox" id="gastrointestinal" /></span></li>
          <li>Neurology<span class="toggle"><input type="checkbox" id="neurology" /></span></li>
      </ul>

Мой Javascript имеет вид:

var toggle_cardiology = 0;
var toggle_respiratory = 0;
var toggle_gastrointestinal = 0;
var toggle_neurology = 0;

$(function() {
$('input[type="checkbox"]').bind('click',function() {
    if($(this).is(':checked')) 
    {
        switch (this.id)
        {
           case "cardiology":
            toggle_cardiology = 1;
            break;
           case "respiratory":
            toggle_respiratory = 1;
            break;
           case "gastrointestinal":
            toggle_gastrointestinal = 1;
            break;
           case "neurology":
            toggle_neurology = 1;
            break;

и т. Д.(что громоздко с 10+ категориями и оператором else с переключателем для их возврата обратно)

Я думаю о чем-то вроде конкатенации тега HTML id с префиксом toggle_ - в псевдокоде:

if (toggle_ + this.id == 1){
    toggle_ + this.id == 0}

if (toggle_ + this.id == 0){
    toggle_ + this.id == 1}

Спасибо, Ник.

Ответы [ 3 ]

1 голос
/ 18 марта 2011
var toggle = {"cardiology":0,"respiratory":0,"gastrointestinal":0,"neurology":0};

$(function() {
    $('input:checkbox').bind('click', function() {
        toggle[this.id] = $(this).is(':checked') ? 1 : 0;

        //Debug:To check the current values : begin
        var s = "";
        $.each(toggle, function(i, val){
            s += i + ":" + toggle[i] + " ";
        })

        alert(s);
        //Debug:To check the current values : end
    })
})
0 голосов
/ 18 марта 2011

Динамические переменные?

if($(this).is(':checked')){
    window["toggle_"+this.id] = 1;
}

РЕДАКТИРОВАТЬ:

Сокращенный:

window["toggle_"+this.id] = ($(this).is(':checked'));
0 голосов
/ 18 марта 2011
var toggle = {
  cardiology: 0,
  respiratory: 0
}

$(function() {
  $('input[type="checkbox"]').bind('click',function() {
    toggle[this.id] = ~~($(this).is(':checked'));
  });
});

$ (this) .is (': checked') возвращает true / false. Используя двойной побитовый оператор NOT, вы получаете 1 или 0.

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

...