老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

jQueryUI模態表單瘋狂踩坑-創新互聯

想套用一下前端的組件寫一個表單驗證的頁面,于是試了一下jQuery UI

公司主營業務:成都網站建設、成都做網站、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。創新互聯公司是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創新互聯公司推出華陰免費做網站回饋大家。

官網的例子

首先把官網的例子貼上:




    
    
    jQuery UI Dialog - Modal form
    
    
    
    
    
    


All form fields are required.

Existing Users:

Name Email Password
John Doe john.doe@example.com johndoe1

試了一下,一切都很美好。

From表單DIV的位置

首先看到CSS寫的很粗,比如第一條:

label, input { display:block; }

直接就定義了所有label和input標簽的樣式。看著body里是2個DIV,于是想把2個div外面再包一層div,像下面這樣:


然后所有的css樣式前面都加上自己的這個div,就不會和別的樣式沖突了,比如這樣:

#myui label, #myui input { display:block; }

問題:修改后,模態框里的css樣式都沒有應用上。比如lable和input沒有變成塊級標簽,導致沒有換行
原因:這里 id="dialog-form" 這個div的位置變了,跑到了 id="myui" 這個div的外面了。造成這個情況的原因是,jQuery UI就是這么做的,把 id="dialog-form" 這個div挖出來,出來好之后append到一個位置,而默認位置是 body 標簽。
解決方法:知道原因后,修改css的寫法也是可以實現的。但是也是有方法按照原來想的那樣,讓 id="dialog-form" 這個div仍然放在 id="myui" 里面的。在dialog里加上一個 appendTo 參數,指定模態框要添加的位置,之前沒有指定就是默認(body):

dialog = $( "#dialog-form" ).dialog({
                appendTo: '#myui',
                autoOpen: false,
                height: 400,
               width: 350,
                modal: true,
                buttons: {
                    "Create an account": addUser,
                    Cancel: function() {
                        dialog.dialog( "close" );
                    }
                },
                close: function() {
                    form[ 0 ].reset();
                    allFields.removeClass( "ui-state-error" );
                }
            });

實際有2個提交的按鈕

在提交表單之前,先要知道,實際這個例子中有2個按鈕可以用來提交的。其中一個隱藏了。
寫在form里的submit按鈕:


            

實際位置應該是跑到屏幕外面去了。這里把style屬性去掉就能看到了。這個按鈕的作用是方便我們用鍵盤的回車鍵操作的。
另外jQuery UI幫我們生成的按鈕是在 dialog = $( "#dialog-form" ).dialog() 里用buttons屬性生成的,這里可以自定義以及添加更多的按鈕:

    buttons: {
                    "Create an account": addUser,
                    Cancel: function() {
                        dialog.dialog( "close" );
                    }
                },

另外這里的確認按鈕不是submit,而是觸發一個addUser進行表單驗證的方法。addUser里驗證通過后會生成前端的標簽,在前端添加一行數據,但是submit提交。

表單無法提交

演示的代碼是一個純前端的實現,如果要提交到后端,那么就是在form標簽里加上action屬性。然后先把submit按鈕的style屬性去掉,用submit先提交。
問題:后端收不到發來的請求
原因:前端阻止了submit事件的默認操作,具體就是下面這句

form = dialog.find( "form" ).on( "submit", function( event ) {
                event.preventDefault();  // 這句的意思就是取消事件的默認操作
                addUser();
            });

解決方法:這里直接把阻止的代碼注釋掉就好了
現在可以使用回車鍵進行submit提交了,但是確認按鈕并不能提交

問題2:確認按鈕不是submit
原因:這個按鈕綁定的是addUser,而addUser里也沒有submit提交
解決方法:把確認按鈕的click綁定為觸發form的submit事件,這樣這個確認按鈕的效果就和submit一樣了,而且submit里也是要先執行addUser()進行驗證的。把 dialog = $( "#dialog-form" ).dialog() 里用buttons屬性改成了下面這樣,這個buttons的參數是可支持 Object 和 Array 兩種形式,這里我改用了Array的形式:

buttons: [
                {text: "確認", click: function () {
                        form.submit();
                    }},
                {text: "取消", click: function () {
                        dialog.dialog('close');
                    }
                }
            ],

請求的表單內容為空

現在后端可以收到請求了,但是收到的都是沒有值的空的請求。
問題:后端內收到請求,但是請求的值都是空值
原因:前端在發送submit請求前,清空了表單的內容。在 dialog = $( "#dialog-form" ).dialog() 里最后有一個close屬性,值是一個方法:

    close: function() {
                    form[ 0 ].reset();
                    allFields.removeClass( "ui-state-error" );
                }

close屬性是在對話框關閉的時候要執行的內容,這里面清空了form表單的內容。
具體步驟是,submit事件會首先觸發addUser()進行表單驗證。addUser()里面會先用 checkLength() 驗證長度,然后用 checkRegexp() 進行正則的驗證。如果驗證失敗會返回false組織之后事件的發生。如果驗證通過則會先執行關閉模態框的操作:

        dialog.dialog( "close" );

這里就要關閉模態框了,然后返回true,之后才是執行submit提交的動作。但是關閉模態框的時候,數據就清空了。服務的收到的就是被清空后的空表單發來的請求,并且是在通過了前端的數據驗證之后的。
解決方法:應該可以先不關閉模態框,等submit提交之后再關閉。不過實現起來也不方便。表單清空的功能還是有用的,但是只要在下次打開前清空就好了。這里可以用一個open方法替代原來的close方法。
另外一個坑:官網的頁面里是有一個create方法的,本來想用這個的。但是發現沒有用,然后去源碼里找了一下(jquery-ui.js):

$.widget( "ui.dialog", {
    version: "1.12.1",
    options: {
        appendTo: "body",
        autoOpen: true,
        buttons: [],
        classes: {
            "ui-dialog": "ui-corner-all",
            "ui-dialog-titlebar": "ui-corner-all"
        },
        closeOnEscape: true,
        closeText: "Close",
        draggable: true,
        hide: null,
        height: "auto",
        maxHeight: null,
        maxWidth: null,
        minHeight: 150,
        minWidth: 150,
        modal: false,
        position: {
            my: "center",
            at: "center",
            of: window,
            collision: "fit",

            // Ensure the titlebar is always visible
            using: function( pos ) {
                var topOffset = $( this ).css( pos ).offset().top;
                if ( topOffset < 0 ) {
                    $( this ).css( "top", pos.top - topOffset );
                }
            }
        },
        resizable: true,
        show: null,
        title: null,
       width: 300,

        // Callbacks
        beforeClose: null,
        close: null,
        drag: null,
        dragStart: null,
        dragStop: null,
        focus: null,
        open: null,
        resize: null,
        resizeStart: null,
        resizeStop: null
    },

上面的Callbacks應該就是所有的方法了,并沒有create。然后才試的open。

優化-調整模態框大小

還是這個生成模態框的函數 dialog = $( "#dialog-form" ).dialog() ,里面的 height 和 width 屬性,可以設置模態框的默認大小
問題:這里模態框有可能會出現滾輪
原因:模態框 id="dialog-form" 這個div里有這個樣式 overflow: auto ,所以溢出會出現滾動條。
解決方法:把overflow樣式覆蓋掉應該就可以了,不過根本問題是溢出。我這里造成溢出的標簽是form里的input標簽。樣式是這樣的:

input.text { margin-bottom:12px; width:95%; padding: .4em; }

這里我調整了 width 的寬度就好了。

優化-直接隱藏模態框

例子中沒有這個情況,但是我用的時候頁面加載的時候會首先顯示出模態框,等加載完畢后模態框會隱藏掉。
問題:加載頁面的時候會有一瞬出現模態框
原因:因為我把js代碼的位置放到的最后,所以模態框的標簽的代碼讀完的時候會顯示出來,等js代碼讀取完的時候才會隱藏
解決方法:應該把生成模態框的js主要是 dialog = $( "#dialog-form" ).dialog() 方法提到前面就好了。不過我用了另外一個方法,給我的模態框的div標簽加上了這個類:

jquery-ui.css 里,這個類是這樣的:

.ui-helper-hidden {
    display: none;
}

就是簡單的隱藏掉,試過之后依然可以顯示出來。

修改后的版本

替換掉了模板語言的部分,我用的修改后的版本如下:




    
    Title
    
    


請填寫要新建的組的名稱

用戶組列表:

id 群組名 備注
1 測試一 test1
2 測試2 test2
3 測試三 test3

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


新聞標題:jQueryUI模態表單瘋狂踩坑-創新互聯
網頁地址:http://www.xueling.net.cn/article/diejge.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 99久久亚洲综合精品成人 | 在线观看一区二区三区视频 | 九九专区一线二线三线 | 日韩精品中文有码 | 国产女人乱子对白AV片 | 毛片免费观看网址 | 日韩国产欧美一区二区 | 免费人成网WW555KKK在线 | 久久99精品久久久久蜜臀 | 中文字幕在线播放一区 | 91精品国产综合久久久动漫日韩 | 国产精品成人永久在线 | 大地8在线观看免费影视大全 | 97香蕉久久国产在线观看 | 久久精品国产2020 | 日本xxx大片免费观看 | 欧美日本一道本在线视频 | 精品夜夜澡人妻无码av蜜桃 | 日本爽快片18禁片 | 中文字幕第一页卡通动漫在线 | 成年美女黄网站色大片不卡 | chinesepronhdvideos国产91| 亚洲男人的天堂一区二区 | 99激情网| 亚洲乱码中文字幕综合区 | 国产午夜福利精品一区 | 无码人妻品一区二区三区精99 | 久久久久久毛片免费看 | 日日操夜夜操免费视频 | 人妻无码中文专区久久五月婷 | 国产亚洲人成a在线v网站 | 欧美精品一区二区三区在线四季 | 好男人看在线视频 | 办公室1战4波多野结衣在线观看 | 久久99精品热在线观看 | 又爽又黄axxx片免费观看 | 国产成人精品无码A区在线观看 | 欧美又大又粗又硬又色A片 亚洲精品国产成人片 | 伊人国产在线播放 | 日本三级吃奶头添泬无码 | 亚洲一区二区三区偷拍女厕 |