タイトル属性を持つアンカーで表示されるブラウザで生成されたタイトルボックスを削除しようとしています。これを実行したい理由は、ツールチップjQueryに干渉しないようにするためです。
現在、ホバー時にタイトル属性を削除していますが、ホバー状態から自分を削除した後、タイトル属性が再割り当てされることはありません。どうして?
タイトル属性を持つアンカーで表示されるブラウザで生成されたタイトルボックスを削除しようとしています。これを実行したい理由は、ツールチップjQueryに干渉しないようにするためです。
現在、ホバー時にタイトル属性を削除していますが、ホバー状態から自分を削除した後、タイトル属性が再割り当てされることはありません。どうして?
それは
var title
HandlerIn関数にあり、handleroutでは定義されていません。最も簡単な解決策は、de var titleをホバー関数の外に置き、ホバーハンドラーの中に割り当てることです。
編集:Photonによって述べられているように変数を削除することも解決策です。ただし、varsを使用することを強くお勧めします。グローバルな変数が定義されていない場合、コードはすぐに乱雑になり、保守できなくなります。しかし、それは私の意見です。
これは、title
変数がmouseenter
関数内にあるが、内部で使用しているためですmouseleave
。title
変数を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);
});
そこで最初の関数で宣言var title = $(this).attr('title');
していますが、2番目の関数には。の知識がありませんtitle
。
タイトル値が再割り当てされない理由は、最初の関数でタイトル変数を宣言しているためです。これは、2番目の関数の範囲外です。元のタイトル値を保持したい場合は、2番目の関数がそれにアクセスできるようにする必要があります。
代わりに、データ値に追加してみてください。
$(this).data("originalTitle", $(this).attr("title"));
次に、2番目の関数内でそれを再割り当てします。
$(this).attr("title", $(this).data("originalTitle"));
title
私は、あなたが設定しているジェネリック変数がページ上にn個のリンクを取得していることを避けたいと思います。要素自体のデータとして値を保存することは、私にとってはるかに優れたアプローチのように思えます。
変数名の前にあるすべての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);
});