2010-07-31 52 views
1

我有一段代码,来计算一些子项的宽度,而不是在每个函数中声明parentWidth和其他变量..我试图创建全局变量 - 使用..但是,它不工作。jQuery全局变量不能被函数访问

这里是我的代码的一部分:

$(document).ready(function(){ 

parentWidth = $(this).parent().width();  // parent width in pixels 
margin = parentWidth/100;    // pixel equivalent of a 1% margin 
border = 6;     // 6px total border for each input field 


    $(".element.twoinone input").each(function() { 
     $(this).css('width', 
      (((parentWidth - (margin * 2)) - (border * 2))/2) 
      + 'px'); 
    }); 
}); 

的上级宽度,边缘和边界变量不由“每个”功能(我有多个)访问。我试过使用live(),livequery(),..等。但是,没有骰子。我知道它可能是简单的,这个小白忽视..所以任何帮助非常感谢! 谢谢! 另外,如果您有基于一个父容器计算宽度百分比任何输入宽度和占各元素的边界,保证金和数量,..我所有的耳朵:d

UPDATE 这不是: $(文件)。就绪(函数(){

parentWidth = $(this).parent().width();  

    $(".element.twoinone input").each(function() { 
     $(this).css('width', 
      (((parentWidth - (margin * 2)) - (border * 2))/2) 
      + 'px'); 
    }); 
}); 

与此相同:

$(文件)。就绪(函数(){

$(".element.twoinone input").each(function() { 
     $(this).css('width', 
      ((( $(this).parent().width()  - (margin * 2)) - (border * 2))/2) 
      + 'px'); 
    }); 
}); 
+0

你在计算父宽度时期望*这是什么? – 2010-07-31 03:10:14

+0

我期待'this'是我使用变量IN的元素..所以,当在$(“。element.twoinone input”)中使用parentWidth时,我想'this'== $(“。element。二进制输入“) – revive 2010-07-31 03:37:22

+0

是不是: parentWidth = $(this).parent()。width(); ()。(“。element.twoinone input”)。each(function(){(this).css('width', (((parentWidth - (margin * 2)) - (border * 2))/ 2) +'px'); }); 与此相同: $( “element.twoinone输入”)每个(函数(){$ (本)的CSS( '宽度', ((($(本).parent ()。width() - (margin * 2)) - (border * 2))/ 2) +'px'); }); – revive 2010-07-31 04:01:57

回答

2

当你宣布这个:

parentWidth = $(this).parent().width(); 

你没有得到宽度该元素的父(在<input>),它使用documentthis,因为这是你的语境”需要在函数内部获取宽度,或者在每个内部或作为插件,但不是像这样“全局”。

+0

啊.. gotcha ..所以,没有办法使用'this'来创建变量,并且在函数内部使用该变量时,请使用'this'==我们当时所在的元素? – revive 2010-07-31 03:27:40

+0

@revive - 如果需要,可以使'$(this).parentWidth()'为一个函数快捷方式,如下所示:'$ .fn.parentWidth = function {return this.parent()。width(); };'但是我不确定这会给你带来多大的好处,所以要你:) – 2010-07-31 03:36:35

+0

还没有尝试过这一点呢..我只是希望能够访问该docready中所有函数的变量......将这实现了那个? – revive 2010-07-31 04:55:20

0

parentWidth不是全局变量,它存在于document.ready函数中,但它不是任何函数的全局变量。

除非你宣布之前document.ready这个变量:
事情是这样的:

var parentWidth; 
$(document).ready(function(){ 
parentWidth = $(this).parent().width(); 
.... 

这同样与其他2个变量。

+0

这不是问题,变量是可访问的,范围在这里不是问题:) – 2010-07-31 03:20:14

+0

我尝试了两种方法 - 在docready之前将其添加为Var并将parentWidth的名称更改为elementWidth ..没有任何更改而不是宽度的计算..他们做正确的计算,当我在每个函数中包含变量..但是,我希望学习一种方法来重新使用代码比这个更好的LOL:D谢谢! – revive 2010-07-31 03:26:27

+0

是的,我知道了,@尼克克雷弗带你到正确的解决方案。 – 2010-07-31 03:32:00

0

尝试将变量放在$(document).ready()以外

+0

尝试..没有骰子.. – revive 2010-07-31 03:29:19