2016-02-27 68 views
1

後,我有以下的陣營組成:返回按鈕文字撥動

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。我怎樣才能確保按鈕的文字恢復到原來的狀態?

回答

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); 
    } 
}; 
+0

感謝您的答覆原文但這不起作用。即使窗體關閉,按鈕的文本仍然是「關閉窗體」 – JordanBarber

+0

您確定邏輯正確嗎?特別注意'is(':visible')'不適用於動畫方法,因爲元素總是在滑動時可見等,但是它不是很清楚表單是什麼,爲什麼使用'currentTarget'而不是' this'和'this.form'等? – adeneo

+1

我做了一些編輯,試試? – adeneo