2016-07-07 8 views
0

ボタンをクリックすると、p要素のツールチップを開き、ボタンを再度クリックするとツールチップを閉じます。動的に追加されたクラスのmouseleaveでjQueryのツールチップを閉じるのを防ぎます

$(document).ready(function() { 
 
    var obj = null; 
 

 
    $('input').click(function() { 
 
    if (obj == null) { 
 
     obj = $('p'); 
 
     obj.tooltip({ 
 
     items: 'p', 
 
     content: 'Some help' 
 
     }); 
 
     obj.tooltip("open"); 
 
    } else { 
 
     obj.tooltip('disable'); 
 
     obj = null; 
 
    } 
 
    }); 
 

 
    $('.help').mouseenter(function(e) { 
 
    e.stopImmediatePropagation(); 
 
    }); 
 

 
    $('.help').mouseleave(function(e) { 
 
    e.stopImmediatePropagation(); 
 
    }); 
 
});
<link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script> 
 

 
<input type='button' value='Click me' /> 
 

 
<p class='help'> 
 
    Some text 
 
</p>

私が今やろうとすると、ボタンがクリックされたときに、私は動的にp要素にクラスのヘルプ」を追加していることを除いて、同じことです。ツールチップを開いたままにするのではなく、マウスの上で消えます。 mouseenter()/mouseleave()ハンドラが起動しなかったので、on()に置き換えました。イベントは現在起動しますが、ツールチップはまだ閉じます。

$(document).ready(function() { 
 
    var obj = null; 
 

 
    $('input').click(function() { 
 
    if (obj == null) { 
 
     obj = $('p'); 
 
     obj.tooltip({ 
 
     items: 'p', 
 
     content: 'Some help' 
 
     }); 
 
     obj.tooltip("open"); 
 
     obj.addClass('help'); // Added statically in DOM in above snippet 
 
    } else { 
 
     obj.tooltip('disable'); 
 
     obj = null; 
 
    } 
 
    }); 
 

 
    $(document.body).on('mouseenter', '.help', function(e) { 
 
    //console.log('on mouseenter'); 
 
    e.stopImmediatePropagation(); 
 
    }); 
 

 
    $(document.body).on('mouseleave', '.help', function(e) { 
 
    //console.log('on mouseleave'); 
 
    e.stopImmediatePropagation(); 
 
    }); 
 

 
});
<link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script> 
 
    
 
<input type = 'button' value = 'Click me' /> 
 

 
<p> 
 
Some text 
 
</p>

答えて

0

ツールチップが離れSome textから移動した後mouseleaveイベントが発生した後に隠れているようです。マウスリーブ機能が必要な場合を除いて、このイベントをツールチップから完全に無効にして、目的の結果を得ることができます。

obj.tooltip("open"); 
obj.toggleClass("help"); // Toggle help class 
obj.off("mouseleave"); // Remove the event from the tooltip 

jsFiddle:https://jsfiddle.net/c1f0ft8j/

関連する問題