私は次のコードを持っています:
$(document).ready(function(){
$("div.subtab_left li.notebook a").click(function(event) {
event.preventDefault();
return false;
});
});
しかし、要素をクリックすると、デフォルトのアクションが妨げられません..なぜですか?
コードを次のように変更する場合:
$(document).ready(function(){
$("div.subtab_left li.notebook a").click(function() {
e.preventDefault();
alert("asdasdad");
return false;
});
});
それはデフォルトのアクションを停止しますが、警告しません.. jQuery docsで答えが見つかりませんでした。
完全なコードは次のようになります。
$(document).ready(function(){
$('#tabs div.tab').hide();
$('#tabs div.tab:first').show();
$('#tabs ul li:first').addClass('active');
$('#tabs ul li a').click(function(){
$('#tabs ul li').removeClass('active');
$(this).parent().addClass('active');
var currentTab = $(this).attr('href');
$('#tabs div.tab').hide();
$(currentTab).show();
return false;
});
$("div.subtab_left li.notebook a").click(function(e) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
alert("asdasdad");
return false;
});
});
hTML構造は次のとおりです。
<div id="tabs">
<ul id="nav">
<li><a id="tab1" href="#tab-1"></a></li>
<li><a id="tab2" href="#tab-2"></a></li>
<li><a id="tab3" href="#tab-3"></a></li>
<li><a id="tab4" href="#tab-4"></a></li>
</ul>
<div class="tab" id="tab-1">
<script type="text/javascript">$(document).ready(function(){$("ul.produse li").hover(function () {
$("ul.produse li").removeClass('active');$(this).addClass('active');}, function () {$(this).removeClass('active');});});
</script>
<div class="subtab_left">
<ul>
<li class="notebook"><a href="#">1</a></li>
<li class="netbook"><a href="#">2</a></li>
<li class="allinone"><a href="#">2</a></li>
<li class="desktop"><a href="#">2</a></li>
<li class="procesoare"><a href="#">2</a></li>
<li class="placi_video"><a href="#">2</a></li>
<li class="hdd_desktop"><a href="#">2</a></li>
<li class="tv_plasma"><a href="#">2</a></li>
<li class="tv_lcd"><a href="#">2</a></li>
<li class="telefoane_mobile last_item"><a href="#">2</a></li>
</ul>
</div>
更新
そして、あなたの問題があります-あなたはdoいくつかのa
要素のイベントハンドラをクリックする必要があります。この場合、ハンドラーはその順序で起動されるため、ハンドラーをアタッチする順序は重要です。
ここに 作業フィドル があり、これは希望する動作を示しています。
これはあなたのコードでなければなりません:
_$(document).ready(function(){
$('#tabs div.tab').hide();
$('#tabs div.tab:first').show();
$('#tabs ul li:first').addClass('active');
$("div.subtab_left li.notebook a").click(function(e) {
e.stopImmediatePropagation();
alert("asdasdad");
return false;
});
$('#tabs ul li a').click(function(){
alert("Handling link click");
$('#tabs ul li').removeClass('active');
$(this).parent().addClass('active');
var currentTab = $(this).attr('href');
$('#tabs div.tab').hide();
$(currentTab).show();
return false;
});
});
_
ハンドラーをアタッチする順序が交換されており、e.stopImmediatePropagation()
を使用して他のクリックハンドラーの起動を停止し、_return false
_を使用してリンクに従うデフォルトの動作を停止します(同様にイベントのバブリングを停止します__e.stopPropagation
_)のみを使用する必要がある場合があります。
e.stopImmediatePropagation()
を削除すると、2番目のクリックハンドラーのアラートが最初のアラートの後に発生することがわかります。 _return false
_を削除してもこの動作には影響しませんが、ブラウザーがリンクをたどる原因になります。
注
より良い修正方法は、セレクターが完全に異なる要素のセットを返すようにすることです。これにより、オーバーラップはありませんが、これは常に可能とは限りません。
最初のコードスニペットが機能しない理由がわかりません。停止したいというデフォルトのアクションは何ですか?
他のイベントハンドラをリンクにアタッチした場合は、代わりに event.stopPropagation()
および event.stopImmediatePropagation()
を調べる必要があります。 _return false
_は_event.preventDefault
_andevent.stopPropagation()
の両方を呼び出すことと同等であることに注意してください。ref
2番目のコードスニペットでは、e
は定義されていません。そのため、e.preventDefault()
でエラーがスローされ、次の行は実行されません。言い換えると
_$("div.subtab_left li.notebook a").click(function() {
e.preventDefault();
alert("asdasdad");
return false;
});
_
あるべき
_//note the e declared in the function parameters now
$("div.subtab_left li.notebook a").click(function(e) {
e.preventDefault();
alert("asdasdad");
return false;
});
_
実際の例 は、このコードが実際に機能することと、リンクのフォローのみを停止する場合は_return false
_が実際に必要ないことを示しています。
これを試してください:
$("div.subtab_left li.notebook a").click(function(e) {
e.preventDefault();
return false;
});
これを試して:
$("div.subtab_left li.notebook a").click(function(e) {
e.preventDefault();
});
私はちょうど同じ問題を抱えていた-多くの異なるものをテストしてきました。しかし、それはうまくいきません。その後、jQuery.comのチュートリアルの例をもう一度確認してみました。
jQueryスクリプトはafter参照する要素である必要があります!
そのため、スクリプトはアクセスしたいhtmlコードの後にある必要があります!
そうしないとjQueryがアクセスできないようです。
すでに送信アクションでテストしている場合、それも機能しないことに気づきました。
その理由は、フォームがすでに$(document).read(...
に投稿されているからです
したがって、あなたがする必要があるのは、それを$(document).load(...
に変更することだけです
さて、あなたがブラウザを開いた瞬間に、ページが実行されます。
そして動作します; D
e.preventDefault();
が機能しない場合は、代わりにe.stopImmediatePropagation();
を使用する必要があります。
詳細については、以下を参照してください。 event.stopPropagationとevent.preventDefaultの違いは何ですか?
$("div.subtab_left li.notebook a").click(function(e) {
e.stopImmediatePropagation();
});