首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript忽略布尔值

JavaScript忽略布尔值
EN

Stack Overflow用户
提问于 2014-06-15 06:10:19
回答 2查看 67关注 0票数 0

我尝试执行诸如状态检查之类的操作来启用/禁用设置。

代码语言:javascript
运行
复制
    // file 1
    function settings( valStatus ){
        var status = valStatus;

        this.getStatus = function(){
            return status;
        }

        this.setStatus = function( valStatus ){
            status = valStatus;
        }
    }

在此处调用此函数:

代码语言:javascript
运行
复制
    // file 2
    $settings = new settings( false );

    $(document).ready(function() {
        $( '#openSettings' ).on('click', function() {
            $settings.setStatus( true );
            enableSettings();
        });

        $('#save').on('click', function(){
            $settings.setStatus( false );
            closeSettings();
        });
    });

    // file 1
    enableSettings = function() {

        if( $settings.getStatus() === true ){

            //toggle emptyLink
            $('.myButton').on('click', function(){
                alert($settings.getStatus());
            });

        }
    }

所以在启动的时候点击"myButton“什么也不会发生。在点击"openSettings“,然后点击"myButton”,我得到了警告"true";在点击"save“,然后再次点击"myButton”,我得到了警告"false",但它甚至不会触发,因为我在前面检查了它……有人能帮帮我吗?我的错误在哪里?

EN

回答 2

Stack Overflow用户

发布于 2014-06-15 06:24:24

我认为您可能希望将状态检查放在.myButton点击处理程序内部,而不是外部。这样,您只需要应用该处理程序一次,它是否工作取决于status的值。

代码语言:javascript
运行
复制
$(document).ready(function() {
    var $settings = new settings( false );  // keep out of global scope

    $( '#openSettings' ).on('click', function() {
        $settings.setStatus( true );
    });

    $('#save').on('click', function(){
        $settings.setStatus( false );
    });

    $('.myButton').on('click', function(){
        if ($settings.getStatus()) {
            alert($settings.getStatus());
        }
    });
});
票数 0
EN

Stack Overflow用户

发布于 2014-06-15 07:01:30

首先,你可以用比Java更少的代码来编写JavaScript。您不需要getter和setter方法,因为没有包可见性。因为您不使用setter,所以可以直接访问您的字段。这就减少了代码的可读性,减少了可能出现错误的代码。因此,去掉无用的代码(记住这不是请求编写代码的一行程序)。在互联网上搜索“干净的代码”。

既然你是在JavaScript中,你可以做得更好。一种较小的存储信息的方法。

代码语言:javascript
运行
复制
var mySetting = {};
mySetting.status = true

console.log( mySetting.status );
mySetting.status = false;
console.log( mySetting.status ); 

记得保持你的全局空间整洁!在互联网上搜索"javascript全局范围污染“。因此,请在您的范围内执行此操作。

您的主要问题是,您正在使用闭包。您可能不想在您的情况下使用它。在互联网上搜索"javascript闭包教程“。外面有很多好的。

由于您使用的是Jquery,因此可以使用.data()函数来存储信息。

请参阅http://api.jquery.com/jquery.data/

代码语言:javascript
运行
复制
$(function(){
    $( '#openSettings' ).on('click', function() {
        $('#settings').data( "status", true );
        enableSettings();
    });

    $('#save').on('click', function(){
        $('#settings').data( "status", false );
        closeSettings();
    });

    $('.myButton').on('click', function(){
        alert($('#settings').data());
    });
}); 

或者在HTML本身中。请参阅http://api.jquery.com/attr/

代码语言:javascript
运行
复制
$('#settings').attr( "status", true );
console.log( $('#settings').attr( "status" ) );

或者作为开关。

代码语言:javascript
运行
复制
$('#settings').addClass( "settingsEnabled" ); 
$('#settings').removeClass( "settingsEnabled" ); 
console.log($('#settings').hasClass('settingsEnabled'));

如果你想为简单的信息存储对象引用和超文本标记语言,比如开关等,那么使用.data()就可以了。

请在你自己的代码中去掉$前缀,因为它没有任何意义。如果你使用像angular这样的框架,它将帮助你识别它的来源,或者像$$一样(“不要”)使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24224771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档