Проблема с использованием 'link_to' и jQuery - PullRequest
3 голосов
/ 23 июня 2011

Я использую Ruby on Rails 3.0.7 и jQuery 1.6.1 и привязываю событие щелчка AJAX к выводу link_to HTML, как в следующем примере:

link_to 'Link name', '#', :id => 'link_css_id'

Как видите, я установил URL на #. Делая это, когда я нажимаю на ссылку, текущее представление также будет перемещено вверху страницы. Так как мне не нравится это поведение, я ничего не установил (то есть nil или '') для параметра URL, но при нажатии на ссылку я получаю предупреждающее сообщение «ошибка», которое сразу после исчезновения. Затем в консоли Firebug я получаю:

uncaught exception: [Exception... "prompt aborted by user" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: resource://gre/components/nsPrompter.js :: openTabPrompt :: line 468" data: no]

Как я могу решить эту проблему и избежать перехода вверху страницы при нажатии на ссылку?


Запрос AJAX:

$jQ('#link_css_id').bind('click', function() {
  $jQ.ajax({
    type:    "POST",
    url:     "<%= user_url(@current_user)%>/test_method",
    data:    "test_data=test",

    error:   function(jqXHR, textStatus, errorThrown) {
      alert(textStatus + ' - ' + errorThrown + '\n\n' + jqXHR.responseText);
      $jQ('#css_id').html('error')
    },
    success: function(data, textStatus, jqXHR) {
      $jQ('#css_id').html('success')
    }
  });
});

Ответы [ 3 ]

9 голосов
/ 23 июня 2011

URL "#" означает, что устанавливается внутренняя привязка.Без имени к нему, он просто фокусируется на всей странице и прокручивает обратно вверх.Что касается использования метода link_to, атрибут url является обязательным и не может быть пропущен.

В jquery вы можете использовать preventDefault.Это предотвратит действие по умолчанию для события (например, если щелкнуть ссылку, откроется URL href).Это довольно полезно.Возможно, вы захотите сделать ссылку на существующую страницу для пользователей, у которых не включен javascript (и где вызов ajax не будет работать), в то время как те, кто имеют javascript, игнорируют его.Документация предотвращение дефолта от jQuery.

2 голосов
/ 23 июня 2011

Вы можете установить javascript:void(0) вместо #, это поможет мне.

1 голос
/ 23 июня 2011

Сохраните # и используйте preventDefault, чтобы остановить событие щелчка по умолчанию при перемещении окна.

http://api.jquery.com/event.preventDefault/

...