5 に答える
この新しいコード:
$(document).ready(function() {
$(document).on('click',function(e) {
e.preventDefault();
// ...
});
});
stopPropagation
...ドキュメントにバブルアップするクリックが発生した場合 (より深いハンドラーから呼び出さない限り、ほとんどのクリックが最終的に発生するため)、ブラウザーはデフォルトのアクションを防止する必要があることをブラウザーに伝えます。リンクをクリックした場合のデフォルトのアクションは、リンクをたどることです。
e.preventDefault();
解決策は、クリックのアクションを防ぎたい場合にのみ呼び出すことです。おそらくそのコードを再キャストする方法は次のとおりです。
$(document).ready(function() {
$(document).on('click',function(e) {
var $panel = $("#planning_panel");
if ($(e.target).closest("#planning")[0]) {
// Click is on the planning link, toggle the panel and prevent the default
$panel.slideToggle('slow');
e.preventDefault();
} else {
// Not on the planning link, slide the panel up
$panel.slideUp('slow');
}
});
});
実例| ソース (リンク先に変更../index.html
しhttp://stackoverflow.com
ましたHOME
が、それ以外はコードのみ変更)
ここでは、クリックが#planning
リンク上にある場合にのみ、クリックの既定のアクションを防止しています。
サイドノート:より堅牢であるためclosest
、チェックの代わりに使用しました。e.target.id
マークアップで厳密に必要というわけではありませんが、マークアップを少しspan
変更した場合 (または何かを追加em
)、それが必要になるため、堅牢性に優れています。
$(document).on('click',function(e) {
e.preventDefault();
これにより、クリックのデフォルトの動作が妨げられます。
これが問題になるはずです:
$(document).on('click',function(e) {
e.preventDefault();
ドキュメントのすべてのクリックを禁止するため、リンクが正しく機能しません。最初の行を次のように変更します
$('#planning').on('click', function(e){
e.preventDefault();
ところで、あなたの機能が何をするのかよくわかりません。
$(document).on('click',function(e) {
これは次のようになります。
$(document).on('click', '#planning', function (e) {
<script>
$(document).ready(function() {
$(document).on('click',function(e) {
e.preventDefault();
var $panel = $("#planning_panel");
if (e.target.id == 'planning') {
$panel.slideToggle('slow');
} else {
$panel.slideUp('slow');
}
});
});
この仲間を使う