2013-03-21 3 views
1

Я не понимаю, почему я должен нажать на ссылку дважды в JQuery:Jquery нажмите событие не выполнить на первый щелчок

$(function(){ 
    $("#more_reviewers").click(function(){ 
     $("#reviewer_list").html("<%= escape_javascript(render 'restaurants/restaurant_reviewer_list', :venue => @restaurant, :limit => @restaurant.reviews.count) %>"); 
    }); 
}); 

Когда я нажимаю, вид отменяет ограничение на reviwers показанными и шоу все рецензенты. Я не понимаю, почему мне нужно дважды щелкнуть по одной и той же кнопке. Ни один из других ответов на подобные вопросы не работал для меня, потому что проблема связана с надежностью файла cookie или с другим, что я не делаю.

Я только что проверил еще одну вещь: когда я помещаю предупреждение о типе события, он не показывает ничего в первый раз (как если бы JS-скрипт не был привязан к ссылке), то второй раз он предупреждает о праве тип события («щелчок»).

Связь с ID «more_reviewers» выглядит следующим образом в рельсах:

<%= link_to "more", "#", :id => "more_reviewers", :remote => true %> 

Ссылка показывает правильные вещи, но только после того, как щелкнул дважды (первый раз, ничего не появляется, чтобы изменить на странице)

Справка будет очень признательна.

+0

Is «#more_reviewers» внутри элемента? – codeVerine

+0

Да @Sagar_Jackey. Я редактировал свой вопрос со ссылкой, вот он для вас: – Laurent

+0

Удалите ': remote => true' из вашего' link_to'. Это полезно только в том случае, если вы хотите использовать встроенные функции Rails для Ajax, но вы сами записываете привязки Javascript, поэтому это бесполезно и вызывает нежелательный эффект при нажатии дважды. – Mischa

ответ

3

Ваш show.js.erb должен содержать только:

$("#reviewer_list").html("<%= escape_javascript(render 'restaurants/restaurant_reviewer_list', :venue => @restaurant, :limit => @restaurant.reviews.count) %>"); 

Сейчас это вы связываете событие щелчка на ссылке, которую вы уже кликнули, что означает, что вы должны нажать ее снова.

+1

ОК Миша, прежде всего это сработало. Спасибо. Во-вторых, я в замешательстве. В представлении «Показать» есть, среди прочих кнопок, ссылка «more_reviewers». Я думал, когда загружаю представление show, он также загружает все сценарии в show.js.erb. Имело смысл, что у меня должен быть слушатель onclick (или эквивалент), готовый реагировать, когда есть щелчок. Мне кажется, что, щелкнув по ссылке, я звоню на весь код show.js.erb. Что, если бы у меня был другой код, не связанный с ссылкой, скажите слушателю, чтобы щелкнуть по другой ссылке на странице? – Laurent

+0

Реакция также задерживается этим решением. Он реагирует на щелчок в первый раз, но ответ медленнее, чем после второго щелчка предыдущей реализации. Это потому, что вся страница перезагружается удаленно? – Laurent

+0

Нет, он не загружает show.js.erb. Вы должны использовать только файлы .js.erb для возврата содержимого после вызова Ajax. Для обычного javascript используйте app/assets/javascripts/applition.js. – Mischa

0

Удалите это '#' в своем html-коде. Заменить его на javascript:void(0);

<%= link_to "more", "javascript:void(0);", :id => "more_reviewers", :remote => true %> 
+0

К сожалению, это не сработает - ссылка перестает отвечать полностью! – Laurent

+0

, попробуйте просто удалить «#» следующим образом: '<% = link_to" more "," ",: id =>" more_reviewers ",: remote => true%>' – codeVerine

+0

По-прежнему та же проблема. Щелчок зарегистрирован, но ничего не происходит в первый раз; он регистрирует клик в консоли браузера. Во второй раз клик регистрируется, и я вижу правильное поведение на экране. – Laurent

0

Это также сработает.

$("#more_reviewers").click(function(e){ 
    e.preventDefault(); 
    #..... 
}); 
+0

Спасибо за помощь. Однако это дает то же поведение, что и раньше - мне нужно дважды щелкнуть! – Laurent

+0

Вы хотите просто обновить ** review_list ** при нажатии этой кнопки? Если да, можете ли вы попробовать изменить ** link_to ** на тег ** кнопки **. –

+0

По-прежнему та же проблема с кнопкой. Щелчок зарегистрирован, но ничего не происходит в первый раз; он регистрирует клик в консоли браузера. Во второй раз клик регистрируется, и я вижу правильное поведение на экране. – Laurent

0

попробовать:

<%= link_to "more", "", :id => "more_reviewers", :remote => true %> 

в моем случае

<%= link_to "more", "#", :id => "more_reviewers", :remote => true %> 

тоже работает.

+1

Привет, Shweta, я пробовал это, и obvs это не сработало. Что имеет смысл, потому что id является идентификатором элемента DOM, а не параметром. – Laurent

+0

Спасибо Shweta. Я пробовал оба этих решения (основываясь на других сообщениях), и проблема сохраняется: мне всегда нужно дважды щелкнуть. – Laurent

0

В вашем Java Script Попробуйте в том числе это:

<%= javascript_include_tag "jquery-1.8.3", "jquery.validate" %> 

Я думаю, что это решит вашу проблему, как я получил решения с помощью этого

1

Просто был вопрос, как это, и вы должны быть в состоянии решить эту проблему как это (это позволяет делать другие вещи, JS в одном файле, а не в application.js):

$(function(){ 
    $("#more_reviewers").bind('ajax:complete', function() { 
    $("#reviewer_list").html("<%= escape_javascript(render 'restaurants/restaurant_reviewer_list', :venue => @restaurant, :limit => @restaurant.reviews.count) %>"); 
    }); 
}); 
Смежные вопросы