切换后返回按钮文本

时间:2016-02-27 19:34:49

标签: javascript jquery if-statement reactjs state

我有以下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变量存储“Close Form”文本,因为它变为currentTarget。如何确保按钮的文本返回其原始状态?

1 个答案:

答案 0 :(得分:2)

您可以将原始文本存储在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);
    }
};