2011-02-15 58 views
1

我有一個簡單的地址形式利用真棒新的數據鏈接插件。這是一個簡單的創建/編輯方案,如果存在ID,則執行ajax調用來填充表單;如果不存在,則爲空白表單。jQuery數據鏈接不處理選擇列表

dataComplete : function(data){ 
     $self.step1Data = data; 
     $self.Templates.step1('#step1form', $self.step1Data); 
     $('#step1form').link($self.step1Data); 
    } 

上述函數被調用這兩種情況下,鏈接的形式向step1Data對象(我只是傳遞一個空的JavaScript對象,如果我沒有任何東西來填充表格)。你在上面看到的'Templates'對象是一個簡單的包裝器,它使用了同樣令人敬畏的jQuery模板插件。

此作品很好編輯時; .link()完全符合表單,一切都很好,很棒。處理空格式時出現問題:除狀態選擇列表之外的每個字段都已鏈接。下面是選擇列表中的HTML:

<select class="state" id="State" name="State"> 
    <option value="UT">Utah</option> 
</select> 

class和id的命名規則是相同的形式的其他部分,但數據鏈路似乎並沒有注意到它在它自己的。我大概可以將其配置爲手動完成,但對於清潔我不希望如果我可以擺脫它。 任何想法爲什麼它不鏈接選擇列表?

+0

另外一個比我更重要的人應該創建jquery-datalink標籤;它不會讓我這樣做:(。 – Dusda

+1

你能分離出這個JSFiddle,並可能repro你的問題?http://jsfiddle.net/rniemeyer/UUcDg/ –

+0

我想通了,但我想知道爲什麼我直到現在才知道JSFiddle,這看起來非常有用! – Dusda

回答

0

好吧,算出來。根據Schalck的this very detailed article,當將空表單綁定到具有數據鏈接的對象時,文檔暗示的行爲並不準確。

本質上,數據鏈接只設置鏈接和事件以在對象內創建屬性; 它實際上不會實現它們之間的雙向同步,直到更改事件被觸發。換句話說,直到用戶實際在表單字段中鍵入內容爲止。

這種行爲對於大多數控件來說都很好(並且爲了可能的性能原因,它等待用戶輸入很有意義)。 問題是,目前的文檔暗示否則。考慮到這一點,我只是觸發形式選擇列表中的變化事件後調用。鏈路()像這樣:

dataComplete : function(data){ 
     $self.step1Data = data; 
     $self.Templates.step1('#step1form', $self.step1Data); 
     $('#step1form').link($self.step1Data); 

     //trigger the select lists 
     $('[name=State]').trigger('change'); 
     $('[name=Type]').trigger('change'); 
    } 

你也可以簡單地重複在表單中輸入字段和觸發所有如果有必要的話,他們的變化事件。下面是一種方法,我敢肯定有更好的方法(這裏的DOM遍歷是form - > ul - > li - > inputs)。

$('.stepForm').children().children('input').trigger('change')