2011-01-20 19 views
1

簡単な質問。すべてのブラウザでJqueryでEvent.preventDefault()が失敗する

<a rel="nofollow" id="claim-job-link" data-method="post" class="button green claim-job" href=""><span class="button"> <span class="text"> Claim Job </span> </span></a> 

そして、次のjQuery:

$("#claim-job-link").bind('click', function(event) { 
       event.preventDefault(); 
    }); 

問題なく呼び出された私は、次のHTMLを持っています。 preventDefaultにブレークポイントを追加すると、そのブレークポイントが呼び出されます。ただし、ブラウザはChromeとFirefoxの両方でリダイレクトされます。誰も同じようなことに直面した?それが終了したときに

for (i = 0, l = elems.length; i < l; i++) { 
     match = elems[i]; 

     if (maxLevel && match.level > maxLevel) { 
      break; 
     } 

     event.currentTarget = match.elem; 
     event.data = match.handleObj.data; 
     event.handleObj = match.handleObj; 

     ret = match.handleObj.origHandler.apply(match.elem, arguments); 

     if (ret === false || event.isPropagationStopped()) { 
      maxLevel = match.level; 

      if (ret === false) { 
       stop = false; 
      } 
      if (event.isImmediatePropagationStopped()) { 
       break; 
      } 
     } 
    } 

    return stop; 
} 

その後、それはリダイレクトを行い実行します:イベントが最初に防止して、jqueryのは、このコードブロックに入っているように見えます

を追加する


編集コール。

ありがとうございました

+1

子の 'span'要素のいずれかにハンドラが設定されていますか? – lonesomeday

+0

それは問題かもしれません...おそらくあなたはスパンからのイベントの伝播を防ぎますか? –

+0

私のアプリケーションのどこかに見ると、これは私のpreventDefault呼び出しで起こっているようです。コールに影響を与える可能性のあるシステム全体に何かがありますか? @元@ lone - いいえ、スパンの処理はありません。 –

答えて

1

あなたの助けを借りてくれてありがとう。私はそれを考え出した。レールアプリでは、remote => trueまたは:method =>:xxxのいずれかを呼び出すと、リンクにタグが追加されます。このタグは、event.preventDefault呼び出しが機能しないように、railsアプリケーションによって処理されます。 :method属性を削除することで、呼び出しが機能するようになりました。 Go figure。あなたのご親切に感謝します。

+0

出力される実際のHTMLとは何ですか?それは最初に投稿されたはずのものです –

+0

それは最初に掲示されました。 * data-method = "post" *呼び出しが失敗しました。 –

+0

data-method = 'post'を追加しても失敗することはありません!私の答えには、あなたが仕事をしているように、例文へのリンクがあります。あなたの問題は別の場所にある –

1

私にとってはうまく動作します。 http://jsbin.com/ateje4/edit何か他のことが起こっているに違いありません。私はそれを追跡するあなたのページから削減を作成します。

1

注:bindは追加です。これを試してみてください:

$("#claim-job-link").unbind('click').bind('click', function(event) { 
    event.preventDefault(); 
}); 
+0

複数のハンドラを追加しても、そのうちの1つからevent.preventDefault()を呼び出しても動作するはずです。しかし、同じノード上またはそのノード内の別のハンドラがstopPropagation()を呼び出している可能性が非常に高くなります。 OPは、彼のコードの他のどの部分がそれらのノードと対話しているのかを理解する必要があります。 –

+0

まあ、私たちは一日中 "うまくいくべき"、あるいは "すべきではない"ことについて話すことができますが、彼からのコードがなければ、それはまったく推測ゲームです。 – ken

関連する問題