Javascript 主干:在某些事件上切换方法

Javascript 主干:在某些事件上切换方法,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我想要一个按钮来切换主干中的两种方法,但我有问题。总的来说,我对JS还很陌生 如果单击按钮: 我想展示一个隐藏的div 更改所单击按钮的文本 然后,如果再次单击该按钮(该按钮包含新文本并显示隐藏的div) 更改文本 隐藏显示的div 隐藏的第二种方法没有被激发?我想知道这是否是因为.hide最初不在DOM中,因为它被添加到show方法中。只是一个猜测,也许有更好的方法在一个类上切换方法 这是我的JS 'touchstart .share-btn' : 'show', 'touchstar

我想要一个按钮来切换主干中的两种方法,但我有问题。总的来说,我对JS还很陌生

如果单击按钮:

  • 我想展示一个隐藏的div

  • 更改所单击按钮的文本

然后,如果再次单击该按钮(该按钮包含新文本并显示隐藏的div)

  • 更改文本
  • 隐藏显示的div

隐藏的第二种方法没有被激发?我想知道这是否是因为.hide最初不在DOM中,因为它被添加到show方法中。只是一个猜测,也许有更好的方法在一个类上切换方法

这是我的JS

'touchstart .share-btn' : 'show',
'touchstart .hide' : 'hide'


    'show' : function (e) {
        var view = this;

        $(e.currentTarget).closest('.tile').find('.share-tools').fadeIn('fast');
        $(e.currentTarget).addClass('hide');
        if ($(e.currentTarget).hasClass('hide')){
             $(e.currentTarget).find('.button-copy').closest('.button-copy').html('close');
        }

    },

    'hide' : function (e) {
        var view = this;
            if($(e.currentTarget).hasClass('hide')) {
            $('.share-tools').fadeOut('fast');
            $(e.currentTarget).removeClass('hide');
            $(e.currentTarget).find('.button-copy').closest('.button-copy').html('share');
        }

    },

尝试在事件侦听器中返回false,以防止在第一次单击时调用这两个方法。

也许稍微修改一下代码会有所帮助。我是根据我认为你想要达到的目标而创作的

以下是相关的视图代码:

var View = Backbone.View.extend({

    ...

    // Make it clear that these are the same element.
    // Ensure they will not both fire by making them exclusive.
    events: {
        'mousedown .share-btn:not(.hide)' : 'show',
        'mousedown .share-btn.hide' : 'hide'
    },

    'show' : function (e) {
        console.log('show');
        var $e = $(e.currentTarget);
        $e.closest('.tile').find('.share-tools').fadeIn('fast', function () {
            $e.addClass('hide');
        });
        $e.find('.button-copy').closest('.button-copy').html('close');
    },

    'hide' : function (e) {
        console.log('hide');
        var $e = $(e.currentTarget);
        $e.closest('.tile').find('.share-tools').fadeOut('fast', function () {
            $e.removeClass('hide');
        });
        $e.find('.button-copy').closest('.button-copy').html('share');
    }
});

您可以在这里找到正在工作的JSFIDLE:

我理解您的意图,但问题是什么?上面的代码是否引发错误,或者您是否没有看到所需的行为?未触发.hide的第二个方法?我想知道这是否是因为.hide最初不在DOM中,因为它被添加到show方法中。谢谢你的帮助!您可以看到,它正在将事件委托给视图的根元素,因此即使稍后添加了类,它也应该注册单击
.hide
。最初的问题是如何定义当前目标。但是现在这两种方法都是在第一次单击时调用的。也许最好重新开始。如果单击选择器,然后再次侦听第二次单击并执行不同的方法,那么显示元素的最佳方式是什么?基本上我只需要了解如何显示和隐藏的基础上点击一个按钮?谢谢所有的帮助!让我一天都很愉快谢谢你的鼓励:)很高兴我能帮忙。