2012-01-12 4 views
1

Недавно я пытался вникать в передовые (ну для меня) концепции программирования, такие как абстракция и функциональное программирование и т. Д. Это привело меня к экспериментированию с функциями w/anon.jQuery.css() не относится к элементу

У меня есть ситуация, когда динамически генерируемые значения не применяются к целевому элементу через анонимную функцию, используя .css({}). Я думаю, что это связано с ложными переводами с объектными литералами из моих исследований.

Ни консоли Chrome, ни FF не вызывают никаких ошибок, поэтому я должен спросить экспертов.

Я сделал скрипку, но это было не очень хорошо. Я просто собираюсь связать ресурсы, задействованные на сайте dev.

Это мой сайт-разработчик, который я использую для воспроизведения/экспериментирования и тестирования новых вещей.

http://dev/kenstowell.net

Файл JS: http://dev.kenstowell.net/scripts/scripts.js

Все можно найти через консоль отладчика, конечно.

Итак, вот что предполагаемое поведение:

  1. На (window).load, initDOM() называется.

    $(window).load(function(){ //Style Initial Dom Elements initDOM(); });

  2. Внутри initDom(), я пытаюсь установить верхний предел по отношению к родительскому контейнеру с помощью вызова setElemMargin() и подач его с соответствующим Params.

    setElemMarg("#main-content-one", "#intro-text", "#intro-text", "margin-top");

  3. setElemMarg() получает высоту поставляемой арг и использует их, чтобы вычислить запас, чтобы быть установлено в .css() карты.

    var setElemMarg = function(elem1, elem2, elemTrgt, propName){
    var margH = (getH(elem1) - getH(elem2))/2;
    $(elemTrgt).css({propName : margH});
    console.log(elem1, elem2, elemTrgt, propName, margH); }

    var getH = function(elem){ return $(elem).height(); console.log($(elem).height()); }

  4. применять рассчитанную маржу margin-top. (Сверху методом)

    $(elemTrgt).css({propName : margH});

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

Кен

ответ

2

Проблема заключается в вашей setElemMarg() функции:

var setElemMarg = function(elem1, elem2, elemTrgt, propName) { 
    var margH = (getH(elem1) - getH(elem2))/2; 

    $(elemTrgt).css({propName : margH}); // <-- Here. 

    console.log(elem1, elem2, elemTrgt, propName, margH); 
} 

Буквальный синтаксис объекта вы используете в вашем вызове css() результатов в JQuery попытке обновить свойство propName стиля вместо свойства, имя которого хранится в propName.

Вы можете использовать кронштейн обозначения для решения этой проблемы:

var styleProps = {}; 
styleProps[propName] = margH; 
$(elemTrgt).css(styleProps); 

Или просто называют два аргумента формы css():

$(elemTrgt).css(propName, margH); 
+0

СПАСИБО! Я не делал связь с чтением документов, две формы аргумента могли принимать имена переменных ... sigh. Я продолжал пытаться сделать какую-то странную конкатенацию b/c, я думал, что они должны быть струнами. – Ken

0

Поскольку setElemMarg называется в initDOM в window.load событие, то jquery/dom не гарантируется быть готовым. Вы должны вызвать эту функцию в событии загрузки документа

+0

К сожалению, загрузка документа ужасна для вычисления ширины/высоты, как она называется до того, как создаются такие вещи, как изображения. [читайте здесь] (http://stackoverflow.com/questions/7865143/jquery-height-function-returning-inaccurate-value) – Ken

+0

вы абсолютно правы ... Я имел в виду использовать '$ (документ). ready (function() {...}); ' – Skyrim

2

Почему бы не попробовать использовать $(element).attr('style','css_values');?

+3

Поскольку все остальные встроенные стили (если они есть) будут перезаписаны. – Connum

+0

Человек! Я полностью забыл, у меня возникли проблемы с конкатенацией значений, которые включают запятую, например, в .attr(), как вы рекомендуете писать это с помощью var? – Ken

+0

var margH = (getH (elem1) - getH (elem2))/2; // $ (elemTrgt) .attr ('style', 'margin-top:' + margH + ';'); // <- Здесь. * Извините, проблема с линией кода в этом текстовом поле: p –

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