Проблема JQuery .bind () / .unbind () - PullRequest
0 голосов
/ 13 августа 2011

Я испытываю странное поведение с .bind() и .unbind() в JQuery, хотя моя ситуация, по-видимому, идентична примеру, приведенному на сайте JQuery. В этом случае bind / unbind применяется к вкладке JQuery (одна из многих). При нажатии на вкладку загружается действие контроллера через ajax.

# show.html.erb:
$(document).ready( function(){
    var projectNav = function(){
        $("#tabs-project .loadingDiv").show();
        $.ajax({ url: "<%= url_for(params.except(:action).merge(:action => 'show_project')) %>", dataType: 'script' })
    };
    $("#projectMenuButton").bind('click', projectNav);
});

# show_project.js.erb
$("#tabs-project .loadingDiv").remove();
$("#tabs-project").append('<%= escape_javascript(render :partial => "profiles/project")%>')
$("#projectMenuButton").unbind('click', projectNav);

Партия .unbind() работает не так - повторное нажатие кнопки меню снова загружает партиал.

Когда я изменяю существующую отмену привязки на $("#projectMenuButton").unbind('click');, она отменяет привязку всего, включая основную функцию вкладки (для переключения представления на правый элемент div).

1 Ответ

1 голос
/ 13 августа 2011

У вас проблема с областью действия ... projectNav определяется только в области действия $(document).ready, поэтому она не определена при передаче в unbind.Решение:

# show.html.erb:
var projectNav = function(){
        $("#tabs-project .loadingDiv").show();
        $.ajax({ url: "<%= url_for(params.except(:action).merge(:action => 'show_project')) %>", dataType: 'script' })
};
$(document).ready( function(){
    $("#projectMenuButton").bind('click', projectNav);
});

# show_project.js.erb
$("#tabs-project .loadingDiv").remove();
$("#tabs-project").append('<%= escape_javascript(render :partial => "profiles/project")%>')
$("#projectMenuButton").unbind('click', projectNav);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...