2011-12-23 13 views
2

JavaScriptのイベントハンドラに問題があり、何が間違っているのか本当に知りたいです。 これは問題です、私は暴露されたdivの幅を警告したい、しかし、ページがロードされるとすぐに、警告が表示されます。javascriptのイベントハンドラが正しく動作しない

は、ここにHTMLです:

<div id="mainContainer"> 
    <div id="container_1" style="width:200px"></div> 
    <div id="container_2" style="width:100px"></div> 
    <div id="container_3" style="width:300px"></div> 
    <div id="container_4" style="width:150px"></div> 
</div> 

、ここでJSです:

dataRetrieving = { 
    getWidth:function(id){ 
     var box = document.getElementById(id); 
     var tempResult = box.style.width; 
     return tempResult; 
    } 
} 
var container = document.getElementById("container_1"); 
container.onmouseover = function(){ 
    alert(dataRetrieving.getWidth("container_1")); 
}; 

が既に回答、ありがとう:D

私はあなたたちは私を与える任意のヒントをいただければと思います。

ありがとうございます!あなたはこのようなもので、あなたのonmouseoverを設定する必要があります

答えて

2

: - getWidthいるので、何もありません、あなたの現在のコードで

container.onmouseover = function(){ 
    dataRetrieving.getWidth("container_1"); 
}; 

、(container.onmouseoverに設定)イベントハンドラはdataRetrieving.getWidth(...)の結果に設定されています現在何も返されていません。この機能はすぐに実行されているため、アラートがすぐに表示されることもあります。 (有効なものにするためには、別の関数を返す必要があります。)

+0

しかし、マウスがdivに入ることなくイベントがどのようにトリガされるのですか? 'getWidth'が' tempResult'を返すようにコードを変更し、 'container.mouseover'イベントハンドラの後でのみ結果を警告しますが、問題はまだ残っています。 PS:ああ、あなたのソリューションはうまくいきました。ちょっとだけもっと学びたいと思っています:D thanks – rockleegustavo

+0

これはマウスの動きとは関係ありません。あなたが投稿した元のコードでは、 'getWidth'関数は' alert.'が呼び出される 'container.onmouseover = ...'行の一部として直ちに実行されます。今は、ただちに「警告」を呼びます。 (あなたはそれを単純化したので、今何が起こっているのか、なぜそれが起こっているのかを簡単に見てください。)上記で提案した編集を行うと、期待した結果が得られるはずです。 – ziesemer

+0

あなたが望むようにコードを変更したところ、うまくいきました。私はちょうど 'container.onmouseover = alert(dataRetrieving.getWidth(" container_1 "))'が動作しない理由を知りたい:/ – rockleegustavo

1
container.onmouseover = dataRetrieving.getWidth("container_1"); 

あなたはそれがページのロードに警告だ理由ですが、その関数を呼び出しています。

関連する問題