2011-05-05 63 views
0

我写过一个脚本,如果变量等于true,则会减小div的宽度,然后将其设置为false。如果变量等于false,则会增加div的宽度。这个代码是:Webkit中的JavaScript错误

var open = false; 
function chat() { 
    if (!open) { 
     document.getElementById("frameholder").innerHTML="div is wide"; 
     document.getElementById("window").style.width="1300px"; 
     document.getElementById("window").style.marginLeft="-650px"; 
     open = true; 
    } 
} 
function unchat() { 
    if (open) { 
     setTimeout("document.getElementById('frameholder').innerHTML='div is skinny'",500); 
     document.getElementById("window").style.width="900px"; 
     document.getElementById("window").style.marginLeft="-450px"; 
     open = false; 
    } 
} 

的HTML是这样的......

<a href="#" onclick="chat()">Open chat</a><br /> 
<a href="#" onclick="unchat()">Close chat</a> 
<div id="window"> 
    <div id="video"> 
    </div> 
    <div id="frameholder"> 
    </div> 
</div> 

出于某种原因,这仅适用于Chrome(WebKit的)工作一次。我可以扩大div,然后缩小div,但我无法重新展开它。它在Firefox和IE中运行良好。任何想法为什么?

编辑:更新我的代码到当前状态并添加HTML示例。不幸的是,我仍然有同样的问题...

编辑2:我放弃了这一点。无论如何,这个页面主要用于我的使用,而且我几乎全部使用Firefox,所以我认为这不是一个大问题。

+2

'开放== TRUE'?愚蠢。 '(open == true)== true'如何?需要了解什么是布尔值。 – awm 2011-05-05 00:54:13

+0

错误的副本可能会有所帮助。 – 2011-05-05 00:55:13

+1

为了详细说明@ awm的注释,你应该将if(open == true)'改为'if(open)',并且将if(open == false)改为'if(!open)'。 – 2011-05-05 00:55:15

回答

0

像这样的东西应该做到这一点:

var open = false, 
    $button = document.getElementById('clickme'), 
    $frameholder = document.getElementById('frameholder'), 
    $window = document.getElementById('window'), 
    timer; 

function toggleChat() 
{ 
    clearTimeout(timer); 
    if (open) 
    { 
     timer = setTimeout(function() 
     { 
      $frameholder.innerHTML="div is skinny"; 
     }, 500); 
     $window.style.width="900px"; 
     $window.style.marginLeft="-450px"; 
    } 
    else 
    { 
     timer = setTimeout(function() 
     { 
      $frameholder.innerHTML="div is wide"; 
     }, 500); 
     $window.style.width="1300px"; 
     $window.style.marginLeft="-650px"; 
    } 
    open = !open; 
} 

toggleChat(); 

$button.addEventListener('click', toggleChat, false); 

演示:http://jsfiddle.net/mattball/nuzyJ/


重新OP评论:

这看起来像很多额外的代码

您可以使用jQuery + CSS类更简洁,干净地做到这一点,它也可以在更大范围的浏览器上工作。我不再赘述了frameholder文本变化,但这里的想法:

var $frameholder = $('#frameholder'), 
    $window = $('#window'); 

$('#clickme').click(function() 
{ 
    $window.toggleClass('wide'); 
}).click(); 

http://jsfiddle.net/mattball/pgTJn/

+0

这看起来像很多额外的代码...再加上演示不起作用。 – JacobTheDev 2011-05-05 01:11:23

+0

我在演示中调整了一些东西。它现在有效。 – 2011-05-05 01:12:15

+0

好的,现在可以在Webkit中使用,但不能使用Firefox。不知道什么问题是... – JacobTheDev 2011-05-05 01:13:55