1

要するに、これは動作します --> http://jsfiddle.net/mammolastan/ccafu/3/

これはありません --> http://jsfiddle.net/mammolastan/2mZVu/

jQueryホバーを使用しています。

例 1 では、関数 append(e) はマウス ホバー時にのみ実行されます。これは私が望んでいることです。

ただし、例 2 に示すように、関数 append(e) に​​引数を渡そうとすると、append(e) はページの読み込み時にすぐに実行され、スクリプトは機能しません。

jquery ホバーの問題の他の例を探してみましたが、既存の関数を呼び出しているものは見つかりませんでした。ホバー呼び出しで関数が定義されている例しか見つかりませんでした。

Ex1 は -->

 <html>
    <ul>
    <li>Milk</li>
    <li>Bread</li>
    <li class='fade'>Chips</li>
    <li class='fade'>Socks</li>
    </ul>
    <script>

$("li").hover(append,remove);
$("li.fade").hover(flash);

function append(e)

{
    alert(e);
    $(this).append($("<span> ***</span>"));
}

function remove(e)
{
    $(this).find("span:last").remove();
}

function flash(e)
{   $(this).fadeOut(100);$(this).fadeIn(500);   
}

</script>

Ex 2 はここだけ変更 -->

$("li").hover(append('some string'),remove);
4

1 に答える 1

1

adeneo が言ったように、括弧を追加すると関数がすぐに実行されます。

引数を渡す 1 つの方法は、HTML 要素に属性を追加することです。

<li text="some text" >Milk</li>

そして、リスナーを追加します

$("li").hover(append, remove);

追加関数は次のようになります

function append()
{
    node = $(this);
node.append("<span>"+node.attr('text')+"</span>");
}

これがフィドルの例です: http://jsfiddle.net/2mZVu/7/

もう 1 つの方法は、anonymus 関数を呼び出すことです。currentTarget文字列で要素を渡すことができます:

$("li").hover(function(e){append(e.currentTarget, 'somestring')}, remove);

次に、関数に2つの引数があります:ターゲットと文字列。関数は次のようになります。

function append(e,a)
{
    $(e).append("<span>"+a+"</span>");
}

これがフィドルの例です: http://jsfiddle.net/2mZVu/7/

そうは言っても、コードがきれいではないため、2番目の方法は本当に嫌いです。最適化についてはわかりませんが、最初の方法の方が速いと確信しています。

応援する

于 2013-04-27T19:54:39.863 に答える