Как динамически изменить высоту div - PullRequest
1 голос
/ 29 августа 2009

Как мне динамически изменить высоту div.

Почему это не работает:

 var priceBarElement = $("priceBar");
 priceBarElement.style.height = request.responseText+"px";

Который я надеюсь использовать для изменения div priceBar, которое задается этой строкой ниже.

 <div id="priceBar" style="width:28px;margin-top:20px;background:#F00"></div>

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

Я использую кометы для отправки "высот", поэтому нет явного действия, которое запрашивает новую "высоту".

<%@page contentType="text/html" pageEncoding="UTF-8"%>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">

<%@page import="com.astheymove.util.ApplicationPathUtils"%><html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Comet Weather</title>
    <script src="javascript/prototype.js" type="text/javascript"></script>
    <script src="javascript/scriptaculous.js" type="text/javascript"></script>

    <script type="text/javascript">
        function go(){
            var url = '<%= ApplicationPathUtils.getApplicationPath(pageContext) + "/prices" %>';
            var request =  new XMLHttpRequest();
            request.open("GET", url, true);
            request.setRequestHeader("Content-Type","application/x-javascript;");
            request.onreadystatechange = function() {
                if (request.readyState == 4) {
                    if (request.status == 200){
                        if (request.responseText) {
                            var forecastsElement = $("forecasts"); 
                            forecastsElement.innerHTML = request.responseText;
                            var priceBarElement = $("priceBar");
                            priceBarElement.style.height = request.responseText+"px";
                            // highlight it
                            //new Effect.Highlight(forecastsElement, { startcolor: '#C0C0C0',
                            //  endcolor: '#ffffff' });
                        }
                    }
                    // not to highlight too often
                    //setTimeout("go();",1000);
                    go();                                
                }
            };
            request.send(null);
        }
    </script>
</head>
<body>
    <h1>Rapid Fire Weather</h1>
    <input type="button" onclick="go()" value="Go!"></input>
    <div id="forecasts" style="padding:10px; border:1px solid #ccc; background:#ffffff;">
        Weather forecasts!
    </div>
    <div id="pricesPanel" style="height:100px;">
                <div id="priceBar" style="width:28px;margin-top:20px;background:#F00"></div>
    </div>
</body>
</html>

Ответы [ 3 ]

1 голос
/ 29 августа 2009

Вы пытаетесь установить высоту узла до того, как DOM будет готов.Иногда бывает сложно работать с XHR, потому что вы хотите сразу вызвать этот XHR, но иногда обратный вызов от него происходит до загрузки страницы.Изначально поместите функцию XHR в функцию window.onload (или эквивалент Prototype DOM Ready).Если это решит проблему, вы можете сначала попытаться выполнить XHR и проверить, готов DOM или нет - если это так, установите его, если нет, отложите функцию.

1 голос
/ 29 августа 2009

Попробуйте вместо этого:

var priceBarElement = $("#priceBar")[0];
priceBarElement.style.height = request.responseText+"px";
0 голосов
/ 29 августа 2009

Или даже аккуратнее:

$('priceBar').setStyle({height: request.responseText+"px"});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...