0

jQueryを利用したツールチップを含む架空の注文フォームを作成しました...選択できるスープのラベルにカーソルを合わせると、ツールチップが表示され、スープに関する情報が表示されます(サーバーからデータを取得しています。 phpファイル-質問の最後にソースを提供します)。ループメカニズムを使用してツールチップをオフセットしているので、他のスープのラベルに移動してそれらにカーソルを合わせると、毎回特定の量だけオフセットされます。

ここで問題が発生します...それぞれを1回ホバーすると正常に機能しますが、もう一度上に移動すると、ツールチップが完全に消えるまでページの下に表示され続けます。ループ構造と関係があることはわかっていますが、この状況でループを終了してオフセット増分を元の値に戻す方法がわかりません(したがって、もう一度カーソルを合わせると、ツールチップが同じように表示されます)初めてホバーしたときの位置)。

私はこの2週間でjQueryを学び始めて、彼らのライブラリを調べています。それは非常に複雑に見え、何らかの理由で標準のJavascriptやJavaやPHPと混同することがあるので、問題が些細なものになってしまったことをお詫びします。 (とにかく経験豊富なjQueryコーダーに)。

フォームをホストにアップロードしたので、フォームを見て、何が起こるかを自分で確認できます。http://www.interkiwiwebdevelopers.com/code-examples/scarfiesoupshack/のページを表示できます。このページが表示されたら、各スープの名前にカーソルを合わせると、前述の情報が表示されます。前に述べたように、最初にそれぞれにカーソルを合わせるとうまくいくように見えますが、2回目以降は、元の位置に戻るのではなく、ページ上で上下に表示され続けます。以下に表示される「soupsInfo.php」ファイル(これはファイル「scarfiesoupshack.js」で使用されます)を除くすべてのファイルのソースコードを表示できます。

<?php

/*
* soupsInfo.php: this php script uses a switch-case statement to echo out a string
* describing the soup, of whose "soup_id" is in the GET query string eg:
*
* If you hover over the "Pumpkin Soup" label (whose soup_id would be "pumpkin"), 
* the text that would be echoed out (and displayed in the "hidden" div) would be
* "A delicious creamy pumpkin soup".
* 
* Refer to line 24 in "scarfiesoupshack.js" to see where the GET
* query string is being created.
*/


if (isset($_POST['soup_id'])){
// get soup_id value
$soup_id = $_POST['soup_id'];
switch($soup_id){
case "pumpkin":
echo ("<p style=\"margin-top:0px;\">A delicious creamy pumpkin soup</p>");
break;
case "chicken";
echo ("<p style=\"margin-top:0px; opacity:1.0;\">A flavoursome chicken soup</p>");
break;
case "clam":
echo ("<p style=\"margin-top:0px;\">Fresh clam soup from the ocean</p>");
break;
case "harira":
echo ("<p style=\"margin-top:0px;\">Whats harira?</p>");
break;
default:
echo ("<p style=\"margin-top:0px;\">What is this soup?</p>");
}
}
?>

問題の説明が非常に密集していることをお詫びします。簡潔に説明する方法がわかりませんでした...

前もって感謝します :)。

4

1 に答える 1

0

あなたの問題はこの行です:

$(".tooltip").css("top", "+=33")

これは、現在のオフセットを上から取得し、それに33を追加することを意味します。基本的に、要素を(親に対して)上部に表示し、各ホバーで要素を33ずつ下にシフトします。代わりに、ツールトップの「上部」を、ホバーされている要素の「上部」に移動する必要があります(さらにいくつか必要に応じてオフセット)。

これを行うには、マウスオーバーした後、ホバーした要素の位置を取得します。

elem_top = $(this).position().top;

次に、それを使用してツールチップを配置します。

于 2011-09-13T11:11:46.867 に答える