2016-05-25 60 views
0

我遇到类似问题:Hide dynamically added buttons based on an if statement。随着黑暗室的JS mod我正在努力提高我的JS技能。这两个片段都不是我的,而且都是完美的。基于VAR值隐藏动态JS按钮

这是代码片段创建按钮:

build: function(buildBtn) { 
     var thing = $(buildBtn).attr('buildThing'); 
     if($SM.get('game.temperature.value') <= Room.TempEnum.Cold.value) { 
      Notifications.notify(Room, _("builder just shivers")); 
      return false; 
     } 

这个片段可以确保按钮保持可见,但我想改变它,这样,当一个最大值满足该按钮被隐藏。

//show button if one has already been built 
if($SM.get('game.buildings["'+thing+'"]') > 0){ 
    Room.buttons[thing] = true; 
    return true; 
} 

回答

0

隐藏和显示元素通常是通过一个类来完成的。有一个CSS类这样

.hidden { 
    display : none' 
} 

然后在你的JavaScript中,添加或删除hidden类根据您的病情

if(condition) { 
    $(element).addClass('hidden'); 
    } else { 
    $(element).removeClass('hidden'); 
    } 
0

很难建议,因为没有足够的上下文。您展示的片段可能不仅仅是专门负责控制按钮的可见性(尽管内联评论是这样说的)。因此,以下建议可能无法正常工作,您需要更多关于您要做什么以及更多代码的信息。

如果您有权修改代码段,那么您可以在其中包含最大值。如果最大值是一个变量(即myCustomMaxValue)和它的范围那么我最好的猜测将其添加在这里:

var myCustomMaxValue = 88; 
var someOtherVariableInScope = 50 

//show button if one has already been built 
if($SM.get('game.buildings["'+thing+'"]') > 0){ 
    //add your condition here and yield true/false 
    var myCustomCondition = someVariableInScope > myCustomMaxValue; 
    Room.buttons[thing] = myCustomCondition; 
    return myCustomCondition; 
} 

我建议debug;关键字。将它放入代码片段并打开浏览器的开发人员工具,其调试器将受到打击。然后,您可以检查范围内的变量,并验证代码段实际上负责动态显示和隐藏按钮。

//show button if one has already been built 
if($SM.get('game.buildings["'+thing+'"]') > 0){ 
    debug; 
    Room.buttons[thing] = myCustomCondition; 
    return myCustomCondition; 
}