我尝试执行诸如状态检查之类的操作来启用/禁用设置。
// 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";在点击"save“,然后再次点击"myButton”,我得到了警告"false",但它甚至不会触发,因为我在前面检查了它……有人能帮帮我吗?我的错误在哪里?
发布于 2014-06-15 06:24:24
我认为您可能希望将状态检查放在.myButton点击处理程序内部,而不是外部。这样,您只需要应用该处理程序一次,它是否工作取决于status的值。
$(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());
}
});
});发布于 2014-06-15 07:01:30
首先,你可以用比Java更少的代码来编写JavaScript。您不需要getter和setter方法,因为没有包可见性。因为您不使用setter,所以可以直接访问您的字段。这就减少了代码的可读性,减少了可能出现错误的代码。因此,去掉无用的代码(记住这不是请求编写代码的一行程序)。在互联网上搜索“干净的代码”。
既然你是在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/
$(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/
$('#settings').attr( "status", true );
console.log( $('#settings').attr( "status" ) );或者作为开关。
$('#settings').addClass( "settingsEnabled" );
$('#settings').removeClass( "settingsEnabled" );
console.log($('#settings').hasClass('settingsEnabled'));如果你想为简单的信息存储对象引用和超文本标记语言,比如开关等,那么使用.data()就可以了。
请在你自己的代码中去掉$前缀,因为它没有任何意义。如果你使用像angular这样的框架,它将帮助你识别它的来源,或者像$$一样(“不要”)使用它。
https://stackoverflow.com/questions/24224771
复制相似问题