JQuery 测验应用程序 - 使用 <id> 标签来切换变量的开/关

Posted

技术标签:

【中文标题】JQuery 测验应用程序 - 使用 <id> 标签来切换变量的开/关【英文标题】:JQuery quiz app - use <id> tag to toggle variable on/off 【发布时间】:2011-03-18 15:59:57 【问题描述】:

我正在编写一个 jquery phonegap 测验应用程序,并且有许多类别,用户可以通过复选框从中选择。然后返回属于这些类别的相关问题。但是,如果选中该类别的复选框,我有两个巨大的 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

谢谢,尼克。

【问题讨论】:

【参考方案1】:
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
    )
)

【讨论】:

感谢 amit_g 这正是我想要的!尼克【参考方案2】:
var toggle = 
  cardiology: 0,
  respiratory: 0


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

$(this).is(':checked') 返回真/假。使用双位非运算符,你得到 1 或 0。

编辑:您应该使用一个对象来存储切换状态,以便您可以动态访问它们。

【讨论】:

感谢您的回复 - 将记住双位 NOT 运算符以供将来编码,以前不会遇到它。尼克【参考方案3】:

动态变量?

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

编辑:

缩短:

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

【讨论】:

以上是关于JQuery 测验应用程序 - 使用 <id> 标签来切换变量的开/关的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 测验应用程序 - 突出显示无序列表条目和调用函数

如何使用 Jquery 保存测验的进度

jQuery测验

如何使用 PHP、MySQL 和 Jquery 创建测验

如何使用 jquery 遍历 HTML 页面的所有选定元素

Javascript 测验 - 通过 jQuery 上的 next() 方法到达下一个兄弟的问题