2010-07-31 3 views
1

У меня есть фрагмент кода, чтобы рассчитать ширину некоторых дочерних элементов и вместо объявления parentWidth и других переменных в функции EVERY. Я пытаюсь создать глобальные переменные, -использованный .. но, его не работает.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'); 
    }); 
}); 

parentWidth, маржинальные и пограничные переменные не доступны в «» каждой функции (которая у меня есть кратное). Я пробовал использовать live(), livequery(), .. и т. Д., Но без кубиков. Я знаю его, вероятно, что-то простое, что этот noob не замечает .. так что любая помощь очень ценится !! Спасибо! Кроме того, если у вас есть какой-либо вход на вычисление ширины в процентах основаны на родительские контейнерах ширина и учет для каждых элементы границы, краев и QTY, .. я все уши: D

UPDATE не это : $ (документ) .ready (функция() {

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

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

То же самое, как это:

$ (документ) .ready (функция() {

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

Что вы * ожидающих * 'this' быть при расчете родительской ширины? –

+0

Я ожидаю, что это «элемент», который я использую переменную IN .. поэтому при использовании parentWidth внутри $ («. Element.twoinone input») я хочу «this» == $ (". Element. twoinone input ") – revive

+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)) - (граница * 2))/2) + 'px'); }); – revive

ответ

2

Когда вы объявляете это:

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

Вы не получаете ширину родителя этого элемента (<input>), он использует document для this, так как это контекст вы» re. Вы должны получить ширину внутри функции, либо внутри каждого, либо как плагин, но не «глобально», как это.

+0

ah .. gotcha .. так что нет способа сделать переменную с использованием этого «и», когда эта переменная используется внутри функции, есть «это» == элемент, в котором мы находимся в то время ??? – revive

+0

@revive. Вы можете сделать '$ (this) .parentWidth()' функциональную комбинацию, если хотите, например: '$ .fn.parentWidth = function {return this.parent(). Width(); }; «Но я не уверен, что покупает вас много, так что до вас :) –

+0

еще не пробовал. Я просто хочу иметь доступ к переменным во всех функциях внутри этого docready ... будет это достигается? – revive

0

parentWidth не является глобальной переменной, которая существует в функции document.ready, но не является глобальной переменной для любой функции.

За исключением, если вы объявили эту переменную перед document.ready:
Что-то вроде этого:

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

То же самое с другими 2-х переменных.

+0

Это не проблема, переменные доступны, обзор здесь не проблема :) –

+0

Я попробовал оба - добавив его как Var перед docready .., а также изменив имя parentWidth на elementWidth .. ничего не изменилось и не были рассчитаны ширины. Они правильно вычисляют, когда включаю переменные в каждую из функций. Но я надеюсь научиться использовать код лучше, чем LOL: D Спасибо! – revive

+0

да, я понял, @Nick Craver принимает вас к правильному решению. –

0

Попробуй положить переменные вне $(document).ready()

+0

... .. не кубик .. – revive

Смежные вопросы