6

DOMevent.preventDefault();で forを使用するのに問題があります。ahref

JQueryを使用したHTMLで指定されているように、URLがnofollow削除を投稿しないようにするにはどうすればよいですか?

<td class="trash_can">
<a rel="nofollow" data-remote="true" data-method="delete" data-confirm="Are you sure you want to delete Greek Theater at U.C. Berkeley?" href="/promotions/2/places/46">
<img id="trash_can" src="http://test.dev/images/trash.png?1305741883" alt="Trash">

次のコードは HTML を無効にする必要がありますが、HTML は「よろしいですか」という警告を出す前に削除アクションを投稿します。何も機能していません:

  $(function(){
  $('.trash_can a').click(function(event) {
    event.preventDefault();
    console.log('Clicked Delete');
  });
});
4

4 に答える 4

7

ただの代わりに、または代わりevent.preventDefault()に行う必要がある可能性があります。return falsepreventDefault() はデフォルトのアクションを防ぎますが、イベントは引き続き発生し、おそらく次のハンドラー (Fredrik が指摘した Rails ハンドラーである可能性があります) に移動します。

 $(rails.linkClickSelector).live('click.rails', function(e) {
    var link = $(this);
    if (!rails.allowAction(link)) return rails.stopEverything(e);

    if (link.data('remote') !== undefined) {
      rails.handleRemote(link);
      return false;
    } else if (link.data('method')) {
      rails.handleMethod(link);
      return false;
    }
  });
于 2011-06-09T18:21:18.613 に答える
5

レールを使用していますか?そのように見える。

event.preventDefault()魔法が他の場所で行われているため、機能しない理由があります。Railsには、Railsによって生成されるすべての「削除」アクションのイベントハンドラーを作成するヘルパーがいくつか付属しています。したがって、あなたの場合、ヘルパーをオーバーライドする方法を見つけるか、その特定の削除アクションのカスタムイベントハンドラーを作成する必要があると思います。

これは、Railsが使用するJQueryコードです。

https://github.com/rails/jquery-ujs/blob/master/src/rails.js

これに基づいて(リンクから):

linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]'

リンクから、data-remotedata-method削除した場合に実行されるのは、イベントハンドラーだけです。data-confirm

したがって、それらを削除してから、独自のクリックハンドラーで必要な動作を再作成することをお勧めします。

于 2011-06-09T17:49:23.130 に答える
0

私は同じ問題に直面しましたが、何時間も頭を悩ませた後、良い解決策を得ることができませんでした. したがって、ここで提案された回答に基づいて、次のようなことを行いました。

function enableLink() {
  jQuery("#link_id").removeClass("disabled");
  jQuery("#link_id").attr("data-remote", true);
}


function disableLink() {
  jQuery("#link_id").addClass("disabled");
  jQuery("#link_id").removeAttr("data-remote");
}

jQuery(document).ready(function(){
  jQuery(document).on("click", "disabled", function(e){
    e.preventDefault();
  });
});

私はそれが良い回避策ではないことを受け入れます。しかし、それは私を助けたものです。

于 2015-11-25T09:42:05.510 に答える