easyui Cannot read property 'options' of undefined


使用easyui窗口:以下是父頁面

<html>
<head>
    <title>定時調度管理</title>
</head>
<body width="100%" height="100%">
<table id="ListTable" title="定時調度管理" style="width: 100%;height: 100%"></table>
<div id="homepicAddWin"></div>
</body>
<script>

這里在原窗口打開

function edit(id){
        var $win;
        $win = $('#homepicAddWin').window({
            title:'調度任務',
            href:"/api/jobs/jobForm?id="+id,
            width: 450,
            height: 300,
            shadow: true,
            modal: true,
            iconCls: 'icon-edit',
            closed: true,
            minimizable: false,
            maximizable: false,
            collapsible: false
        });
        $win.window('open');
    }

 注意,有些人會發現在窗口菜單中會出現無法使用js函數,這是因為父窗口在引用中的是子頁面中<body></body>

之間的內容,如果script腳本寫在body外將無法使用;子頁面中我有一個selec標簽用來回顯定時腳本狀態

<tr>
                <div>
                    <td><label for="isPause">狀態:</label></td>
                    <td>
                        <select id="isPause" name="isPause" style="width: 80px" class="easyui-combobox"
                                data-options="required:true" value="${result.isPause}">
                            <option value="true">已暫停</option>
                            <option value="false">運行中</option>
                        </select>
                    </td>
                </div>
            </tr>

直接使用

$(function () {
  $("#isPause").combobox('setValue','${result.isPause}');
}

這個會報錯:jquery.easyui.min.js:12418 Uncaught TypeError: Cannot read property 'options' of undefined

意思是找不到options參數。這是因為easyui會動態改變頁面dom結構,也就是說會在頁面加載后,easyui會自己在頁面生成combobox。

這個時候問題就來了。

因為jquery的$(function(){})方法也是在頁面加載后就執行的,這句語句的執行順序會在easyui生成combobox之前,這個時候頁面還沒有對應的combobox,所以會報錯。

那么如果還是要這個操作,就在頁面加載時設置一個定時器,判斷easyui的控件是否已經完成了初始化。當已完成初始化時,才能使用控件。這樣就通過性能,來換取系統的穩定執行。

參考:https://blog.csdn.net/easonjake/article/details/90671010

修改:

$(function () {
        var interval = window.setInterval(function () {
            //等待頁面加載完畢
            if($("#isPause").combobox().length > 0){
                $("#isPause").combobox('setValue','${result.isPause}');
                window.clearInterval(interval);
            }
        },100)
    })

等待頁面加載完之后,再給select賦值。

 


免責聲明!

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



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