2010-11-17 2 views
3

Вот краткое изложение того, как строится мое приложение:Jquery .css («сверху») возвращает неопределенное

элементы создаются динамически. Все элементы перетаскиваются и изменяются по размеру. Я создал функцию, которая запускается при нажатии кнопки. Вот функция:

 
$('#save_canvas').click(function(e){ 
     var _tmpArray = []; //Temp Array 
     var i = 0; 

     $('#canvas').children('.elem').each(
     //$('.elem').each(
     function(){ 
      _tmpArray = []; //Temp Array 
      _id = $(this).attr('id'); 

      _top = $('#' + _id).css('top'); 
      _left = $('#' + _id).css('left'); 
      _height = $('#' + _id).css('height'); 
      _width = $('#' + _id).css('width'); 
      _tmpArray[0] = _id; 
      _tmpArray[1] = _height; 
      _tmpArray[2] = _width; 
      _tmpArray[3] = _top; 
      _tmpArray[4] = _left; 
     } 
    ); 
    }); 

Функция отлично работает для первый элемент (первый ребенок). но не остальные. Вот выход document.write массива с 3-х элементов создан:

== ОБОЗНАЧЕНИЯ ==
Элемент Id
Высота
Ширина
Топ
левый

 
textblock_1 
50px 
150px 
262px 
100px 

textblock_2 
undefined 
undefined 
undefined 
undefined 

textblock_3 
undefined 
undefined 
undefined 
undefined 

I» вы искали далеко и широко онлайн и не можете понять, что это за жизнь меня ... помогите пожалуйста? :)

+0

Я думаю, что проблема исходит от этого _top (или чего-то еще) = $ ('#' + _id), возможно, именно поэтому они не определены, элемент не «правильно», если вы понимаете что я имею в виду –

+1

Какова цель этого кода? И как выглядит соответствующий HTML-код? – Gumbo

+0

Это приложение, над которым я сейчас работаю ... это насколько я могу сказать на данный момент :) –

ответ

1

У вас есть идентификаторы, установленные на последующих текстовых блоках? Вам не нужно постоянно использовать «$ ('#' + _id), просто используйте $ (this) полностью.

+0

Да, я думаю, что «$ ('#' + _id)« действительно довольно избыточно! –

+0

Все элементы имеют идентификатор, хотя .... как вы можете видеть из вывода document.write. Идентификаторы начинаются с «textblock_» –

+0

@ Luckner. 'el = $ (this); _top = el.css ('top'); 'и так далее! Должно быть быстрее тоже – Zlatev

0

Спасибо всем за помощь в поиске проблемы с помощью этого куска кода!

Заканчивается этот вопрос отчасти из-за того, как я звонил элементы - Я должен выяснить, почему до сих пор - но и потому, что я должен был использовать .height() и .width():

 
_top = $(this).css('top'); 
_left = $(this).css('left'); 
_height = $(this).height(); 
_width = $(this).width(); 

Еще раз спасибо! :)

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