jQuery UI的Dialog在form里面提交的問題


最近在使用jQuery UI的Dialog控件時發現如果在此控件放置表單,則所有表單均無法正常提交,具體表現為:

1.提交按鈕失效,點擊后無任何反應。

2.即便是使用其它手段使頁面產生提交,服務器端也無法取到Dialog中的表單數據。

 

原 因:JQuery會把Dialog的元素append到Body里面,而不是form里面。研究了頁面源碼后發現,jQuery UI Dialog控件初始化時動態生成的HTML元素被添加到頁面的尾部、form元素的后面,而原始的Dialog模板部分(其內包含表單元素)也被移到了 動態生成的HTML元素內。也就是說,原先在form內的表單在Dialog初始化后就被移到form外了,這就導致了Dialog模板內表單全部失效。

 

 第1種方法:

不 知jQuery UI的Dialog這樣設計是一項功能還是一個bug。為了在Dialog內實現正常的頁面提交,根據上述分析,我找到一個簡單的解決辦法——在 jQuery UI控件的“open”事件處理程序中將Dialog控件動態生成的HTML元素移到form元素內,代碼如下:

使用代碼:$("#dialog").parent().appendTo("/html/body/form[0]");

或者

$( " #dlg " ).dialog({
open: function () {
$( " body > div[role=dialog] " ).appendTo( " form#aspnetForm " );
}
});

代碼中的“aspnetForm”是ASP.NET應用程序自動生成的當前頁面form元素ID,使用時你可以換成自己頁面的form ID。

 

第2種方法:

加入一個<div id="dialog_target"></div>這樣的DIV,然后把Dialog寫入這個DIV里面。

$("#dialog").parent().appendTo("#dialog_target");

 

第3種方法:

1、修改Dialog的JS代碼,把代碼添加到form中,而不是body里面
2、Dialog內部的自定義HTML不使用,而直接加入一個IFRAME,把里面的HTML移到另外的頁面中,再與父頁面進行交互就OK(我使用的就是這種方法,這樣這些獨立出來的代碼還可以復用

 

第2種方法,服務器事件可以響應,效果也不錯,可以優先考慮。

我是直接添加的$('.ui-dialog').appendTo('form:first');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM