2013-10-29 34 views
0

更新的jsfiddle:http://jsfiddle.net/leongaban/NmH97/按钮变量作用域 - 如何更新父范围中的变量? jQuery的

在我的主要功能是一个按钮状态修正功能和几个点击功能。

在更新父函数中的布尔值时有点麻烦。我可以通过使用全局变量来解决这个问题,但我知道在这里我不需要这样做。

在下面的函数中,当单击#toggle_company时,我将bool公司(默认设置为true)传递给setupToggleButtons函数。然后切换当前状态,但原始company布尔值不变,您将如何编写此目标并更新父函数wireSearchIcons中的变量公司?

var wireSearchIcons = function() { 

    // Boolean Flags 
    var company = true; 
    var phone = true; 

    var orange_on = '#F37B21'; var orange_off = '#f3cdb1'; 
    var green_on = '#3DB54A'; var green_off = '#d8e0c3'; 

    // Other code... 

     $("#toggle_company").unbind('click').bind('click', function() { 
      setupToggleButtons(company, '#toggle_company path', orange_on, orange_off); 
     }); 

     function setupToggleButtons(bool, path, on, off) { 

      var path = $(path); 
      if (bool) { 
       path.css('fill', off); 
       bool = false; 
       return bool; 
      } else { 
       path.css('fill', on); 
       bool = true; 
       return bool; 
      } 

      console.log(bool); 
     } 
} 
+0

您是否尝试在您的setupToggleButtons()函数中说'company = false'或'company = true'? –

+0

是的,如果我使用公司,它工作正常,如果我使用布尔它只能第一次点击,不会'重置'在第二次点击。 –

+0

将代码发布到已修改的jsfiddle:http://jsfiddle.net/leongaban/NmH97/ –

回答

1

当您在函数调用中使用变量时,您将发送变量包含的值,而不是变量本身。更改参数对值来自的变量没有影响。

JavaScript不支持参考发送参数,所以只是从函数返回值,并将其分配回变量:

$("#toggle_company").unbind('click').bind('click', function() { 
     company = setupToggleButtons(company, '#toggle_company path', orange_on, orange_off); 
    }); 

    function setupToggleButtons(bool, path, on, off) { 

     var path = $(path); 
     if (bool) { 
      path.css('fill', off); 
      bool = false; 
     } else { 
      path.css('fill', on); 
      bool = true; 
     } 

     return bool; 
    } 
+0

啊虽然这可以工作,但仍然存在相同的问题。现在设置一个jsFiddle ... –

+0

这是我有:http://jsfiddle.net/leongaban/NmH97/ –

+0

AH!忘记更新我公司的价值bool! '公司= setupToggleButtons(公司,'#toggle_company路径',orange_on,orange_off);'现在工作,谢谢:) –

0

它没有意义的写一个setupToggleButtons功能这么少。您应该将代码嵌入到点击处理程序中,或者在设置功能中创建点击处理程序。

var wireSearchIcons = function() { 

    // Flags 
    var company = true; 
    var phone = true; 

    var orange_on = '#F37B21'; var orange_off = '#f3cdb1'; 
    var green_on = '#3DB54A'; var green_off = '#d8e0c3'; 

    // Toggle Button States 
    $("#toggle_company").unbind('click').bind('click', function() { 
     company = !company; 
     $('#div_company').css('background', company ? orange_on : orange_off); 
    }); 
    $("#toggle_phone").unbind('click').bind('click', function() { 
     phone = !phone; 
     $('#div_phone').css('background', phone ? green_on : green_off); 
    }); 

} 

wireSearchIcons();