Функция jquery onclick не работает с рельсами link_to_remote - PullRequest
1 голос
/ 30 апреля 2010

В файле js страницы, внутри $(document).ready(function() {}) у меня есть

$(".school a").live("click", function (e){ 
  e.preventDefault();
  ....;
  jsFunc(param1, param2, param3);
});

Теперь у div с классной школой есть теги, сгенерированные rails link_to_remote с :url, :action, :before, :html.

При нажатии на эту ссылку он делает все, что должен делать в отношении link_to_remote, но каким-то образом событие onclick в документе. Уже не прикрепляется к нему. Почему это происходит? JsFunc все, что он делает, это отправляет в URL-адрес асинхронно, я понял, что вставка этого URL-адреса в :before link_to_remote будет работать - но есть ли более элегантный способ использования функции присоединения 1012 *

Ответы [ 2 ]

0 голосов
/ 13 сентября 2011

link_to_remote работает с атрибутом onclick. Очевидно, они вызываются до того, как будут обработаны какие-либо события bind / live, поэтому ваши protectDefaults происходит слишком поздно.

В моем случае я просто хочу предотвратить повторное нажатие на ссылку, поэтому я обнулял атрибут "onclick" во время первого клика:

/* not (yet) well tested */
function doubleClickhandler(event) {
  var t = $(event.target);

  if (t.data("clicked")) {
    event.preventDefault();
  } else {
    t.data("clicked", true);
    if (t.attr("onclick")) {
      /* forcefully remove onclick handler */
      t.attr("onclick", "");
    }
  }
}

function setupdoubleClickHandlers() {
  $("a.doubleclick").each(function () {
    var el = $(this);
    el.removeClass("doubleclick"); /* prevent multiple setups */
    el.bind("click", doubleClickhandler);
  });
}

jQuery(document).ready(function($) {
  setupdoubleClickHandlers();
  $(document).bind('reveal.facebox updatedfacebox', function() {
    setupdoubleClickHandlers();
  });
});
0 голосов
/ 07 декабря 2010

Я считаю, что помощник link_to_remote зависит от Prototype; если вы переключились на jQuery, JavaScript-помощники Rails, такие как link_to_remote, могут не работать.

...