2012-03-13 22 views
0

我在我的項目中使用了mootools。我正在致力於基於可排序的易於定製的菜單。表單 - 將「重置」按鈕更新爲新數據

所以這裏的問題 - 我有包含菜單節點信息的形式。每當用戶選擇不同的節點時,表單就會用JS更新(表單中填充了新數據)。問題是「重置」按鈕顯然「記住」了初始數據,因此無論何時用戶點擊它,它都會載入初始數據表單。

反正是有更新的「默認」的形式狀態,每當我加載新的數據? (OFC我可以寫一段代碼裏面做什麼,我需要,但如果有一些simplier解決方案,使默認的「重置」按鈕,新的數據進行工作將使用它:)工作將大爲減少)

在感謝推進求助

回答

1

數據預先填充我想不出任何東西,除了通過Ajax獲得一個新的源else和替換因此innerHTML的替代形式本身。

+0

正想着,到目前爲止是相同的 - 搶老「形式」標籤的孩子,將它們插入到新的表單並替換舊的表單標記。將「重置」按鈕按預期工作嗎? – 2012-03-13 11:56:41

+0

嘗試這樣做: 變種oldFormChildren = $( 'editNodeForm')的getChildren(); VAR newForm =新元素( '形式',{ '身份證': 'editNodeForm', '方法': '後', '行動': '#' })。採用(oldFormChildren).replaces($ ( 'editNodeForm')); 似乎沒有工作壽。有任何想法嗎? – 2012-03-13 12:09:09

+0

到目前爲止,它已經解決了這個問題 - 添加了記住當前節點數據的變量,並在按下重置按鈕時填充表單。但如果你只需要保存舊的表單數據,爲什麼不用$('editNodeForm')。toQueryString()並保存在一個簡單的字符串中,那麼仍然會喜歡更好的解決方案 – 2012-03-13 12:27:28

0

,你可以使用類似toQueryString連載的形式,然後在MooTools的,更多的String.parseQueryString()基於反向:

(function() { 

Element.implement({ 

    saveFormState: function() { 
     if (this.get('tag') !== 'form') 
      return; 
     this.store("defaults", this.toQueryString()); 
    }, 

    restoreFormState: function() { 
     if (this.get('tag') !== 'form') 
      return; 
     var vals = this.retrieve("defaults"); 
     if (!vals.length) 
      return; 

     var self = this; 
     Object.each(vals.parseQueryString(vals), function(value, key) { 
      var el = self.getElement("[name=" + key + "]"); 
      el && el.set('value', value); 
     }); 
    } 
}); 

})(); 

var f = document.id('f'); 

// save default 
f.saveFormState(); 

document.getElement("button").addEvent("click", f.restoreFormState.bind(f)); 

這ough覆蓋大多數情況下,你可以隨時保存新的默認狀態。不過,需要用無線電和類似的東西來測試它。

這裏有一個基本的小提琴保存/恢復:http://jsfiddle.net/UWTUJ/1/

相關文檔:http://mootools.net/docs/more/Types/String.QueryString(更多)和http://mootools.net/docs/core/Element/Element#Element:toQueryString(核心)

您要保存所有的表單元素的名稱

暗示的依賴屬性/恢復。

我以前創建更復雜的保存/恢復狀態,即使回到場CSS類名,驗證消息等