jQuery UI的Dialog無法提交問題的解決方法
更新時間:2011年01月11日 01:51:17 作者:
最近在使用jQuery UI的Dialog控件時發(fā)現(xiàn)如果在此控件放置表單,則所有表單均無法正常提交
具體表現(xiàn)為:
1.提交按鈕失效,點擊后無任何反應(yīng)。
2.即便是使用其它手段使頁面產(chǎn)生提交,服務(wù)器端也無法取到Dialog中的表單數(shù)據(jù)。
原因:JQuery會把Dialog的元素append到Body里面,而不是form里面。研究了頁面源碼后發(fā)現(xiàn),jQuery UI Dialog控件初始化時動態(tài)生成的HTML元素被添加到頁面的尾部、form元素的后面,而原始的Dialog模板部分(其內(nèi)包含表單元素)也被移到了 動態(tài)生成的HTML元素內(nèi)。也就是說,原先在form內(nèi)的表單在Dialog初始化后就被移到form外了,這就導(dǎo)致了Dialog模板內(nèi)表單全部失效。
第1種方法:
不知jQuery UI的Dialog這樣設(shè)計是一項功能還是一個bug。為了在Dialog內(nèi)實現(xiàn)正常的頁面提交,根據(jù)上述分析,我找到一個簡單的解決辦法——在 jQuery UI控件的“open”事件處理程序中將Dialog控件動態(tài)生成的HTML元素移到form元素內(nèi),代碼如下:
使用代碼:$("#dialog").parent().appendTo("/html/body/form[0]");
或者
$("#dlg").dialog({
open: function () {
$("body > div[role=dialog]").appendTo("form#aspnetForm");
}
});
代碼中的“aspnetForm”是ASP.NET應(yīng)用程序自動生成的當(dāng)前頁面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內(nèi)部的自定義HTML不使用,而直接加入一個IFRAME,把里面的HTML移到另外的頁面中,再與父頁面進行交互就OK(我使用的就是這種方法,這樣這些獨立出來的代碼還可以復(fù)用
第2種方法,服務(wù)器事件可以響應(yīng),效果也不錯,可以優(yōu)先考慮。
1.提交按鈕失效,點擊后無任何反應(yīng)。
2.即便是使用其它手段使頁面產(chǎn)生提交,服務(wù)器端也無法取到Dialog中的表單數(shù)據(jù)。
原因:JQuery會把Dialog的元素append到Body里面,而不是form里面。研究了頁面源碼后發(fā)現(xiàn),jQuery UI Dialog控件初始化時動態(tài)生成的HTML元素被添加到頁面的尾部、form元素的后面,而原始的Dialog模板部分(其內(nèi)包含表單元素)也被移到了 動態(tài)生成的HTML元素內(nèi)。也就是說,原先在form內(nèi)的表單在Dialog初始化后就被移到form外了,這就導(dǎo)致了Dialog模板內(nèi)表單全部失效。
第1種方法:
不知jQuery UI的Dialog這樣設(shè)計是一項功能還是一個bug。為了在Dialog內(nèi)實現(xiàn)正常的頁面提交,根據(jù)上述分析,我找到一個簡單的解決辦法——在 jQuery UI控件的“open”事件處理程序中將Dialog控件動態(tài)生成的HTML元素移到form元素內(nèi),代碼如下:
使用代碼:$("#dialog").parent().appendTo("/html/body/form[0]");
或者
$("#dlg").dialog({
open: function () {
$("body > div[role=dialog]").appendTo("form#aspnetForm");
}
});
代碼中的“aspnetForm”是ASP.NET應(yīng)用程序自動生成的當(dāng)前頁面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內(nèi)部的自定義HTML不使用,而直接加入一個IFRAME,把里面的HTML移到另外的頁面中,再與父頁面進行交互就OK(我使用的就是這種方法,這樣這些獨立出來的代碼還可以復(fù)用
第2種方法,服務(wù)器事件可以響應(yīng),效果也不錯,可以優(yōu)先考慮。
您可能感興趣的文章:
- jQuery前端框架easyui使用Dialog時bug處理
- 淺析JQuery UI Dialog的樣式設(shè)置問題
- jQuery UI Dialog 創(chuàng)建友好的彈出對話框?qū)崿F(xiàn)代碼
- jQuery EasyUI API 中文文檔 - Dialog對話框
- jquery ui dialog ie8出現(xiàn)滾動條的解決方法
- jQueryUI的Dialog的簡單封裝
- jquery插件jquery.confirm彈出確認消息
- 基于jquery ui的alert,confirm方案(支持換膚)
- jQuery UI插件自定義confirm確認框的方法
- 自編jQuery插件實現(xiàn)模擬alert和confirm
- Confirmer JQuery確認對話框組件
- jquery ui dialog替代confirm實例分析
相關(guān)文章
innerHTML與jquery里的html()區(qū)別介紹
我原本一直以為innerHTML和jquery里的html其實是完全一樣的,jquery是多此一舉了,直到我遇到一次問題2012-10-10jQuery+jsp下拉框聯(lián)動獲取本地數(shù)據(jù)的方法(附源碼)
這篇文章主要介紹了jQuery+jsp下拉框聯(lián)動獲取本地數(shù)據(jù)的方法,以實例形式較為詳細的分析了jQuery結(jié)合jsp實現(xiàn)下拉聯(lián)動菜單讀取本地數(shù)據(jù)的相關(guān)技巧,并附帶了完整源碼供讀者下載參考,需要的朋友可以參考下2015-12-12用jQuery技術(shù)實現(xiàn)Tab頁界面之二
這個tab頁是把數(shù)據(jù)全部取回來再顯示,所以沒有數(shù)據(jù)緩存的特點。但是因為數(shù)據(jù)全部是顯示的html代碼,所以對搜索引擎是友好的,也許對seo有好處。2009-09-09jQuery視差滾動效果網(wǎng)頁實現(xiàn)方法經(jīng)驗總結(jié)
這篇文章主要介紹了jQuery視差滾動效果網(wǎng)頁實現(xiàn)方法,結(jié)合實例形式總結(jié)分析了jQuery滾動效果的實現(xiàn)步驟、操作技巧及相關(guān)注意事項,需要的朋友可以參考下2016-09-09