2010-08-26 4 views
0

У меня есть 2 divs. 1-й div должен автоматически изменять собственную высоту, если была изменена 2-я высота div.Как я могу динамически обновлять высоту блока DIV?

var height = jQuery('#leftcol').height(); 
height += 20; 
jQuery('.rightcol-botbg').height(height); 

Там нет возможности изменить HTML-разметку :( У меня есть много изменений макета DHTML, поэтому я не могу запустить предыдущий. Код в любое время. Я хочу, чтобы запустить его динамически. Мне нужно сделать что-то вроде событие/триггер.

Я пытался использовать jQuery('#leftcol').resize(function(){}) или jQuery('#leftcol').change(function(){})., но он не работает. (resize триггера при изменении размера окна.)

+0

Как высота 2 смены сНа? –

ответ

0

Я не понимаю, JQuery, но кажущееся, как этот вопрос помечено Javascript Я дам вам решение Javascript

document.getElementById("yourDivID").style.height = "300px"; 

Редактировать - Вы хотите знать, когда изменилась высота div?

Я не знаю, есть ли лучший способ для этого, но я хотел бы подойти к нему с помощью функции:

function changeBlockHeight(divID, newHeight) 
{ 
    document.getElementById(divID).style.height = newHeight + "px"; 
    blockHeightChanged(divID); 
} 

function blockHeightChanged(divID) 
{ 
    alert("Div " + divID + " has been changed in height!"); 
} 

Где-то в вашем коде:

<div id="testBlock"></div> 
<button onlcick="changeBlockHeight('testBlock')">Test</button> 

Каждый раз, когда вы изменить высоту блоков, вызывается blockHeightChanged().

+0

На самом деле, неважно, какой способ использовать для высоты блока изменения (jQuery или собственный javascript). Но мне нужно знать, как добавить событие для блокировки при изменении высоты блока. – iexx

0

Я хотел бы следить за другой DIV, используя интервал затем обновить соответствующим образом

setInterval(function(){ 
    var height = $('#leftcol').height(); 
    if(height != $('#leftcol').data('oldHeight')) 
    { 
     $('.rightcol-botbg').height(height+20); 
     $('#leftcol').data('oldHeight',height); 
    } 

},500) 

(непроверенные)

Вышеуказанные проверки кода для изменений в высоте каждые 0,5 секунды, а затем обновляет .rightcol-botbg;

+0

Я думал об этом, но таким образом будет дополнительная нагрузка на браузер. :( – iexx

+0

Не очень много, если на вашем сайте так много скриптов, которые работают с очень коротким скриптом каждые 500 мсек, проблема в том, что у вас есть совершенно другой набор проблем. –

1

Когда меняется ваш 1-й дивизион? Независимо от того, какие триггеры должны получить новую высоту div, добавьте к ней 20 и установите высоту другого div. Можете ли вы разместить некоторые образцы кода? Если изменения размера происходят очень часто, таймер/интервал, который многократно проверяет один размер и устанавливает другой, также должен работать, но это менее эффективно.

+0

1-й раздел изменяется после загрузки содержимого AJAX и многих других блоков hides/appers. Конечно, я могу обновить второй блок после каждого AJAX-вызова, показать/скрыть div-блок, но есть много AJAX/блоков. Таймер - это не лучшая идея, как я думаю. – iexx

+0

Если вы поместите код обновления в функцию , это будет не так уж плохо, добавив вызов функции рядом с вашими вызовами ajax | show/hide. – sjobe

+0

+1 Я не думаю, что вы собираетесь инициировать событие, вызванное изменением размера div, поэтому в этот момент вы либо : 1. Проверка изменений с регулярным интервалом (предлагается уже и, вероятно, плохо, потому что он загружает ненужную нагрузку в браузере) 2. Проверка изменений в каждой точке управляемого кода, которая может привести к изменению высоты (идея, представленная в этом ответе) Я думаю, что 2 - единственный способ пойти. – InvisibleBacon

0

ну нет каких-либо общих триггеров для изменения размера элемента.

Какая причина изменения размера div в вашем случае? вы можете проверить свои высоты вправо или после этого.

только альтернатива, о которой я могу думать, это настроить таймер с помощью setInterval и проверять оба размера div каждый раз в то время.

var myInterval = self.setInterval("myCheckFunction()",1000); 

function myCheckFunction() { 
    jQuery('.rightcol-botbg').height(jQuery('#leftcol').height()); 
} 
+0

Спасибо, я тоже не нашел триггер. В этом случае я буду обновлять высоту после каждого вызова или блокировки AJAX. Показать/скрыть. – iexx

0

Использование интервала не очень удобно. Если у вас есть установки, как это:

<div id="content"> 
    <div id="tree">should be full height</div> 
    <div id="data">this one is half the height</div> 
</div> 

Вы можете легко сделать это с помощью CSS. Я не уверен, что это так ...

Другое, но решение, предложенное Томом Галленом, является лучшим.

0

Используйте .bind() для создания настраиваемого типа события, а затем запускайте это событие с помощью .trigger().

Here является скрипкой с примером (немного надуманным, но я думаю, вы получите идею)

+0

Вау, да, Я думаю, что это то, что мне нужно. Я попробую. Спасибо! – iexx

+0

hrm, но в этом случае я должен всегда запускать это событие вручную. http://jsfiddle.net/3u9YJ/10/ Возможно ли, что правая колонка обновится (высота) после изменения содержимого в левом блоке (или left.height())? – iexx

+0

Ах, я думал, что вы изменили размер левой рукой вручную и хотели изменить его размер. Похоже, вы хотите, чтобы он реагировал на изменение размера из-за изменения контента. В этом случае, я думаю, вы захотите привязываться к событию изменения ввода или, возможно, к событию с нажатием клавиши. –

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