1

タイトル属性を持つアンカーで表示されるブラウザで生成されたタイトルボックスを削除しようとしています。これを実行したい理由は、ツールチップjQueryに干渉しないようにするためです。

現在、ホバー時にタイトル属性を削除していますが、ホバー状態から自分を削除した後、タイトル属性が再割り当てされることはありません。どうして?

http://jsfiddle.net/fj4xz/5/

4

5 に答える 5

2

それは

var title

HandlerIn関数にあり、handleroutでは定義されていません。最も簡単な解決策は、de var titleをホバー関数の外に置き、ホバーハンドラーの中に割り当てることです。

編集:Photonによって述べられているように変数を削除することも解決策です。ただし、varsを使用することを強くお勧めします。グローバルな変数が定義されていない場合、コードはすぐに乱雑になり、保守できなくなります。しかし、それは私の意見です。

http://jsfiddle.net/RubenJonker/fj4xz/6/

于 2012-06-05T04:44:28.290 に答える
1

これは、title変数がmouseenter関数内にあるが、内部で使用しているためですmouseleavetitle変数をhoverメソッドの外に移動する必要があります。

var title;
$('a.tooltip').hover(function() {
    title = $(this).attr('title');
    var offset = $(this).offset();
    var width = $(this).outerWidth();
    var height = $(this).outerHeight();
    $content = $('<div class="tooltip">' + title + '</div>').fadeIn('fast');
    $(this).append($content);
    $(this).attr('title', '');
    $content.offset({
        top: offset.top + height,
        left: offset.left + (width - $content.outerWidth()) / 2
    });
}, function() {
    $(this).find('div').fadeOut('fast');
    $(this).attr('title', title);
});​
于 2012-06-05T04:45:06.077 に答える
1

そこで最初の関数で宣言var title = $(this).attr('title');していますが、2番目の関数には。の知識がありませんtitle

于 2012-06-05T04:45:15.050 に答える
1

タイトル値が再割り当てされない理由は、最初の関数でタイトル変数を宣言しているためです。これは、2番目の関数の範囲外です。元のタイトル値を保持したい場合は、2番目の関数がそれにアクセスできるようにする必要があります。

代わりに、データ値に追加してみてください。

$(this).data("originalTitle", $(this).attr("title"));

次に、2番目の関数内でそれを再割り当てします。

$(this).attr("title", $(this).data("originalTitle"));

title私は、あなたが設定しているジェネリック変数がページ上にn個のリンクを取得していることを避けたいと思います。要素自体のデータとして値を保存することは、私にとってはるかに優れたアプローチのように思えます。

于 2012-06-05T04:45:40.687 に答える
0

変数名の前にあるすべてのvar宣言を削除するだけです

グローバル変数になりますこちらをご覧ください

  $('a.tooltip').hover(function() {
        title = $(this).attr('title');
         offset = $(this).offset();
         width = $(this).outerWidth();
         height = $(this).outerHeight();
        $content = $('<div class="tooltip">' + title + '</div>').fadeIn('fast');
        $(this).append($content);
        $(this).attr('title', '');
        $content.offset({ top: offset.top+height, left: offset.left+(width-$content.outerWidth())/2 });
    }, function() {
        $(this).find('div').fadeOut('fast');
        $(this).attr('title', title);
    });​
于 2012-06-05T05:02:33.640 に答える