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'));