【问题标题】:Return button text after toggle切换后返回按钮文本
【发布时间】:2016-02-27 19:34:48
【问题描述】:

我有以下 React 组件:

var $ = require('jquery');

module.exports = {
    trigger: '.form-trigger',
    form: '.financial-form',
    init: function() {
        $(this.trigger).click(this.toggleForm.bind(this));
    },
    toggleForm: function(e) {
        // define currentTarget
        var currentTarget = $(event.currentTarget);
        // define current Text
        var currentText = currentTarget.html();
        // Prevent anchor click default
        e.preventDefault();
        // Remove any active classes
        currentTarget.next(form).slideToggle("fast");
        // console.log(currentText);
        if ($(this.form).is(":visible")){
            // $(element).is(":visible")
            currentTarget.html("Close Form");
        } else {
            currentTarget.html(currentText);
        }
    }
};

页面上有多个“触发器”可以打开它们的相邻表单。在 toggleForm 函数中,“if”语句确定按钮的文本。我存储按钮当前文本,以便如果表单打开,我可以更改为“关闭表单”或将按钮返回到其原始文本。然而,currentText 变量存储“关闭表单”文本,因为它变成了 currentTarget。如何确保按钮的文本恢复到原始状态?

【问题讨论】:

    标签: javascript jquery if-statement reactjs state


    【解决方案1】:

    您可以将原始文本存储在jQuery的data()

    var $ = require('jquery');
    
    module.exports = {
        trigger : '.form-trigger',
        form    : '.financial-form',
        init    : function() {
            $(this.trigger).click(this.toggleForm.bind(this));
        },
        toggleForm: function(e) {
            e.preventDefault();
    
            var currentTarget = $(event.currentTarget),
                flag          = $(this.form).data('flag');
    
            currentTarget.next(form).slideToggle("fast");
    
            if ( !currentTarget.data('text') ) {
                currentTarget.data('text', currentTarget.text());
            }
    
            currentTarget.text(flag ? currentTarget.data('text') : "Close Form");
            $(this.form).data('flag', !flag);
        }
    };
    

    【讨论】:

    • 感谢您的回复,但这不起作用。即使表单关闭,按钮的文本仍然是“关闭表单”
    • 您确定逻辑正确吗?特别要注意is(':visible') 不适用于动画方法,因为元素在滑动等时总是可见的,但还不清楚表单是什么,为什么使用currentTarget 而不是thisthis.form等等?
    • adeneo,感谢您提供的有用提示。如果我不使用 currentTarget,那么页面上的其他隐藏表单会打开吗?
    • 效果很好,但我不明白为什么。有没有机会给我解释一下?
    • 它使用一个标志来切换文本,而不是is(':visible')。正如我上面提到的,元素在切换时是可见的,所以当if 条件被触发时,元素总是可见的,因为它正在被动画化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2017-12-01
    • 2014-12-24
    相关资源
    最近更新 更多