Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript忽略bool_Javascript_Jquery - Fatal编程技术网

JavaScript忽略bool

JavaScript忽略bool,javascript,jquery,Javascript,Jquery,我尝试做一些类似于状态检查的事情来启用/禁用设置 // file 1 function settings( valStatus ){ var status = valStatus; this.getStatus = function(){ return status; } this.setStatus = function( valStatus ){ status

我尝试做一些类似于状态检查的事情来启用/禁用设置

    // file 1
    function settings( valStatus ){
        var status = valStatus;

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

        this.setStatus = function( valStatus ){
            status = valStatus;
        }
    }
在此处调用此函数:

    // 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”; 在再次点击“保存”和“我的按钮”之后,我得到了“false”警报,但它甚至没有触发,因为我之前检查过它。。。。谁能帮帮我吗?
我的错误在哪里?

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

$(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());
        }
    });
});

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

因为您使用的是JavaScript,所以可以做得更好。存储信息的较小方法

var mySetting = {};
mySetting.status = true

console.log( mySetting.status );
mySetting.status = false;
console.log( mySetting.status ); 
记住保持你的全球空间清洁!在互联网上搜索“javascript全球范围污染”。所以在你的范围内做这件事

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

因为您使用的是Jquery,所以可以使用.data()函数来存储信息

var mySetting = {};
mySetting.status = true

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

或者在HTML本身中。看

或者作为开关

$('#settings').addClass( "settingsEnabled" ); 
$('#settings').removeClass( "settingsEnabled" ); 
console.log($('#settings').hasClass('settingsEnabled'));
如果要存储对象引用和HTML以获取开关等简单信息,请使用.data()。好处是,即使使用CSS也可以访问这些信息


请在您自己的代码中去掉$prefix,因为它没有任何意义。如果您使用angular之类的框架,它将帮助您识别原点,或者像$$一样(“不要”)使用它。

您没有在任何地方定义
closeSettings()
函数,首先……您是否也可以发布一些HTML,并制作一个JSFIDLE来完成图片?每次
enableSettings()
,您正在安装新的警报处理程序?”[…]我得到警报“false”,但它甚至不会触发,因为我在“这是什么意思?”?你到底有什么问题?
$('#settings').addClass( "settingsEnabled" ); 
$('#settings').removeClass( "settingsEnabled" ); 
console.log($('#settings').hasClass('settingsEnabled'));