【问题标题】:Update variable when checking checkbox检查复选框时更新变量
【发布时间】:2013-07-09 08:09:56
【问题描述】:

我有一个包含一些变量的脚本,我想根据是否选中复选框来更新这些变量之一。默认情况下未选中该复选框。我现在拥有的是这样的:

var checked = $('#accept').attr('checked');
if (checked) {
    permission = "Y";
} else {
    permission = "N";
};
var track = {
    version: 123,
    id: 123456789,
    order: {
        sv1: 'Y',
        sv2: 'N',
        sv3: 'Name',
        sv4: permission,
        orderid: '123xyz'
    }
};
console.log(track);

我想根据复选框的点击事件更新变量“权限”的内容:

$('#accept').click(function () {
      if (checked) {
      permission = "Y";
      } else {
      permission = "N";
      };
});

Fiddle here.

但这怎么可能呢?

【问题讨论】:

    标签: jquery variables object


    【解决方案1】:

    为了更新您的对象键 (sv4) 值:

    http://jsfiddle.net/k6S3m/6/

    如果您已经将permission 存储到您的对象track 中,那么请不要犹豫,使用您的对象并直接操作它并使用= 为其键设置一个新值。

    var permission = $('#accept').is(':checked') ? "Y" : "N";
    
    var track = {
        version: 123,
        id: 123456789,
        order: {
            sv1: 'Y',
            sv2: 'N',
            sv3: 'Name',
            sv4: permission,
            orderid: '123xyz'
        }
    };
    console.log( track.order.sv4 );                       // returns: N
    
    $('#accept').change(function () {
        track.order.sv4 = this.checked ? "Y" : "N";
        console.log( track.order.sv4 );                   // returns: Y
    });
    

    永远不要忘记通过设置 var 在内部定义变量。

    $('#accept').is(':checked') 使用 jQuery .is() 方法返回一个布尔值 (true/false),而不是我们使用 Ternary Operator ( ? : ) 设置为 "Y" / "N"

    【讨论】:

    • 这个解决方案是我一直在寻找的。非常感谢,Roko。
    【解决方案2】:

    您可以在点击时执行此操作:

    $('#accept').click(function () {
        var permission = this.checked ? "Y" : "N";
        console.log(permission);
    });
    

    FIDDLE DEMO

    【讨论】:

    • 我会改用 onchange 事件
    • 它在 console.log 中工作,但它似乎没有更新 track 对象内的“权限”值。
    【解决方案3】:

    你不能这样做:

    $('#accept').click(function () {
          if ($(this).prop('checked')) {
              permission = "Y";
          } else {
              permission = "N";
          };
    });
    

    这样,如果单击复选框,您将更改变量。

    【讨论】:

      【解决方案4】:

      问题是您正确初始化checked,但显然它不会在单击复选框时更新。您将不得不再次检查。所以试试:

       $('#accept').click(function () {
           if ($('#accept').attr('checked')) {
              permission = "Y";
            } else {
               permission = "N";
            };
        alert(permission);
       });
      

      【讨论】:

      • 在此页面(cmets 部分)阅读更多内容
      【解决方案5】:

      看看这个: 应该是 $('#accept').is(':checked') 而不是 if(checked)

      [小提琴][1]

      [1]: http://jsfiddle.net/k6S3m/4/
      

      【讨论】:

        【解决方案6】:

        试试这个

        $('#accept').on('change', function () { track.order.s4 = this.checked ? 'Y' : 'N'; });
        

        【讨论】:

          猜你喜欢
          • 2018-07-24
          • 2017-07-11
          • 2014-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多