6

1つの変数をインラインでjQuery関数に渡そうとしています(つまりonMouseOver="function();"、実際のリンク(画像マップのエリアタグ)内で使用しています)。

関数は、行の前に配置した場合にのみ呼び出されますが$(document).ready(function(){、これを行うと、jQueryでさまざまな問題が発生します。

私が欲しいのは、単純なタグ(<area shape="circle" coords="357,138,17" onMouseOver="change('5');" id="5" />通常のjQueryコード本体に含まれる関数を起動するなど)用です。

この点を説明するために、次のように機能します。

<script type="text/javascript">
function myfunction(x)    {  alert(x); //Alerts 2  
}
</script>

<img src="/shared_images/loading.gif" border="0" usemap="#Map">
<map name="Map"><area shape="rect" coords="171,115,516,227"
onMouseOver="myfunction('2')"></map>

しかし、以下はそうではありません

<script type="text/javascript" src="scripts/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
function myfunction(x)    {  alert(x); //Nothing happens   
}
}
</script>

<img src="/shared_images/loading.gif" border="0" usemap="#Map">
<map name="Map"><area shape="rect" coords="171,115,516,227"
onMouseOver="myfunction('2')"></map>
4

2 に答える 2

10

2番目の例では、に渡す匿名関数myfunction で宣言しました.ready()。つまりmyfunction、ローカル変数はその匿名関数内のスコープ内にのみ存在し、他の場所から呼び出すことはできません。

2つの解決策があります。

まず、への呼び出しの外(前または後)で宣言できます.ready()。これにより、jQueryとの干渉が発生することはありません。もしそうなら、StackOverflowの質問であなたを歓迎する何か他の問題(おそらく単純な構文エラー?)があります。

次に、イベントハンドラーをアタッチするために使用するべきではありませんonMouseOver=""(JavaScriptとHTMLが混在しているため)。そのため、完全に廃止しましょう。JavaScriptを次のように置き換えます。

$(document).ready(function() {
    $("#that-area-down-there").mouseover(function() {
        alert(2);
    });
});

そしてこれであなたのHTML:

<area shape="rect" coords="171,115,516,227" id="that-area-down-there" />

id(もちろん、コンテキストでより意味のあるものに置き換えたいと思うでしょう。)

于 2009-08-22T13:02:04.823 に答える
1

コードが機能しない理由は2つあります。まず、ready関数の呼び出しで閉じ括弧が欠落しているため、構文エラーが発生します。

次に、関数内で定義する関数は、そのスコープ内にのみ存在します。関数を終了すると、その関数はもう存在しません。

例:

$(document).ready(function(){
   function myfunction(x) {
      alert(x);
   }
   myfunction(42); // here it works
}

myfunction(-1); // here it doesn't exist

次のように、関数内から関数をグローバルに定義できます。

$(document).ready(function(){
  myfunction = function(x) {
    alert(x);
  }
});
于 2009-08-22T13:15:07.290 に答える