2012-03-14 5 views
6

私はここで何が欠けていますか?"on" preventDefault

ご注意:私はとき、ちょうどリンクなしのスクリプトを持っていたかのように私は、ページが読み込までpreventDefaultを使用する場合はjQueryのモバイルが

を使用しています私はfalseを返すように変更しました(これは普通のJS onclickイベントハンドラで使用していましたが)、期待どおりに動作します。 私はすでに他の投稿を見ており、すべて.clickを使用しており、すべてpreventDefaultを提案しています。

$(document).ready(function() { 
    $("#leftdiv a").on("click",function(e) { 
    $("#rightDiv").load(this.href); 
    return false; // I was sure preventDefault would work 
    }); 
}); 

HTML

<div id="leftdiv" style="position:absolute;padding-right:5%; overflow:scroll;"> 
<a href="page1.htm">Launch page 1</a><br /> 
<a href="page2.htm">Launch page 2</a> 
</div> 

<div id="rightDiv" style="padding-left:30%"></div> 
+1

の問題で、通常は最後に置かれる 'return false'とは​​異なり、他のものより前に' e.preventDefault() 'を使ってみてください。 – Joseph

+0

@Joseph通常は最後に置かれます。実行されるコードの最後の部分です。これは、preventDefault呼び出しをどこに置くかに依存しません。 –

+0

_「期待どおりに動作します」_この場合、「期待通りに」何を意味するのか少し分かりますか?あなたの希望する行動は何ですか?そして、動作しない正確なコードを表示できますか? – nnnnnn

答えて

15
e.preventDefault(); 

は動作しませんでしたか?

$('a').on("click",function(e){ 
    //do something 
    e.preventDefault(); 
}); 

上またはあなたのコードの末尾にe.preventDefault();を置くことは、通常は問題ではありません。また、e.stop()の方法があります。しかし、それはあなたのために働いているときにreturn false;と固執してみませんか? jQueryのモバイルドキュメントから

要素のデフォルトのクリック動作をキャンセル

アプリケーションは 要素のデフォルトのクリック動作をキャンセルしたVclickイベントでのpreventDefault()を呼び出すことができます。マウスベースのデバイスでは、vclickイベントで preventDefault()を呼び出すと、バブルイベントフェーズ中に実際のクリックイベントでpreventDefault() を呼び出すことになります。タッチベースの デバイスの場合、実際のクリックイベントは、vclickイベントが送出されてから約300ms後に が送出されるため、もう少し複雑です。 touch デバイスでは、vclickイベントでpreventDefault()を呼び出すと、キャプチャイベントフェーズ中に がブラウザから送出される次のクリックイベントをキャッチしようとするvmouseプラグインのコード がトリガーされ、preventDefaultそれに対するstopPropagation()。上記の に記載されているように、タッチイベント とターゲットに異なる可能性があるため、対応するマウスイベントを一致させることが困難なことがあります。 の場合、vmouseプラグインはまた、 に対応するクリックイベントを座標で識別しようとしています。依然として のターゲットと座標の識別が両方とも失敗する場合があります。 は、clickイベントが送出され、要素の デフォルトアクションがトリガーされるか、またはコンテンツが にシフトまたは置き換えられた場合にクリックをトリガーします別の要素。 が特定の要素/コントロールに対して定期的に発生する場合、 はあなたの行動を引き起こすためにクリックを使用することをお勧めします。

function() { 
    return false; 
} 

// IS EQUAL TO 

function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
} 

出典:http://jquerymobile.com/test/docs/api/events.html

+0

@mplungjan私は自分の答えを編集しました。その周りに本物の道がないように思えます –

+0

私の更新を見てください – mplungjan

+0

さて、私はしましたが、なぜあなたは偽を返さないのですか?それが働いているとき?おかげさまで、 –

1

これは、提供するかもしれない:http://css-tricks.com/return-false-and-prevent-default/

また.on() ISNがdocument.readyが

ソースをサポートされていないとしてもサポートされているようです解決方法を説明する情報がない。 でpreventDefaultは、同様のコードで働いていなかったところ、私は最近、問題に出くわした、と問題が$(document) vs $('body')から委任にある次のことを試してください:これは、jQueryの3.2.1でしかし起こらない

<a href="http://stackoverflow.com" id="test1">Test 1</a> 
<a href="http://stackoverflow.com" id="test2">Test 2</a> 
<script> 
    $('body').on('click', '#test1', function(e) { 
     e.preventDefault(); 
     alert('hi 1'); 
    }); 

    $(document).on('click', '#test2', function(e) { 
     e.preventDefault(); 
     alert('hi 2'); 
    }); 
</script> 

、私は確認することができますこれは2.1.7

+1

これはどうしてあなたはなぜ説明できないのでしょうか? –

関連する問題