Имена динамических переменных в JavaScript - PullRequest
0 голосов
/ 03 марта 2011

РЕДАКТИРОВАТЬ: не важно. Разобрался с проблемой. Просто сделал высоту массивом и назовите каждый идентификатор. Производная все равно спасибо.

Я искал и не особо об этом узнал. У меня есть простой скрипт, который просто анимирует выпадающее меню при наведении курсора. Проблема заключается в том, что если я быстро перемещусь вперед и назад между двумя или более пунктами меню, переменная height, которую я установил в начале каждого наведения, может быть перезаписана. У меня есть обходной путь, который исправляет это после выключения и затем снова включения, сбрасывая высоту в автоматический режим, когда он выключен, но я не буду препятствовать этому вообще. Обычно я делал бы динамическую переменную в других языках, в которых я работал, например:

$height = $(this).attr("id")+"height";

alert($$height);

//which would theoretically alert the height of whatever triggered it. 

Есть ли способ сделать это в jQuery, чтобы у каждого элемента, вызывающего функцию, была своя собственная переменная высоты?

РЕДАКТИРОВАТЬ 2: Поскольку есть интерес, я вставлю все это.

   $("#NavMenu > li").hover(
           function () {
               var height = {};
               height[$(this).attr("id")] = $(this).find("ul").css("height");
               $(this).find("ul").css("height", "0px");
               $(this).find("ul").css("left", "auto");
               $(this).find("ul").animate({ height: height[$(this).attr("id")] }, 300)
           },
            function () {
                $(this).find("ul").css("left", "-999em");
                $(this).find("ul").css(height, height[$(this).attr("id")])
            }
        )

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Да, вы можете сделать это:

$('.obj').get(0).key = 'value';

или

$('.obj').get(0)['key'] = 'value'

Хотя лучше использовать .data():

$('.obj').data('key', 'value');

Советы

1. Вы можете объединить несколько вызовов, например, так:

$('.obj').css('color', 'red').data('key', 'value');

2. Вы можете передатьобъект на .css():

$('.obj').css({
    'width': 100,
    'height': 100
});

3. Если вы не измените другие свойства CSS, вы можете использовать .width() и .height() для установки и получения элементаширина:

HTML

<div id='box'></div>

CSS

#box {
    width: 200px;
    height: 100px;
}

JavaScript

var $box = $('#box');
// 200x100
alert( $box.width() + 'x' + $box.height() );

4. Возможно, вы заметилив предыдущем примере я сохранил ссылку на $('#box') в переменной.В некоторых случаях вы не можете использовать цепочку, например:

var $box = $('#box');
setTimeout(function() {
    $box.animate({ 'width': 100 }, 100);
}, 1000);
setTimeout(function() {
    $box.animate({ 'height': 200 }, 100);
}, 1000);

Если вам нужно это сделать, всегда сохраните ссылку на элемент - это называется кэшированием.В противном случае jQuery придется искать его несколько раз.

0 голосов
/ 03 марта 2011

Я не уверен, почему вы делаете свои собственные методы для входа и выхода.

Вы можете использовать методы hide () и show () jquery (или даже переключаться) с анимацией внутри скобки метода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...