0

我的应用程序适用于许多模态表单对话框,我想通过调用函数来创建模态表单对话框,但是当我单击对话框“i.apply 不是函数”上的“确定”按钮时出现错误。我的代码如下

html:

<div id="dlg_srch_acnt">
        <table cellpadding="0" cellspacing="0" border="0" class="display" id="dtl_acnt_srch" style=" padding-bottom:0px;">
            <thead>
                <tr>
                    <th>Id</th>
                    <th>Account name</th>
                </tr>
            </thead>
            <tbody>
            </tbody>
        </table>
    </div>

脚本

function init_dlg(id, autoOpen, height, width, modal, fn_button1)
            {
                id.dialog({
                    autoOpen:autoOpen,
                    height:height,
                    width:width,
                    modal:modal,
                    buttons:{
                        'OK':fn_button1,
                    },
                    close:fn_close
                });
            }



function fn_ok()
            {
                $('#parnt_acnt').val(acnt_name);
                $('#dlg_srch_acnt').('close');
            }

init_dlg($('#dlg_srch_acnt'), false, '440', '480', true, 'fn_ok()');
4

4 回答 4

3

我相信你$('#dlg_srch_acnt').('close');应该是$('#dlg_srch_acnt').dialog('close');

并在参数中传递函数fn_ok名不是fn_ok()因为那是它的执行值。

init_dlg($('#dlg_srch_acnt'), false, '440', '480', true, 'fn_ok');

acnt_name你的功能是fn_ok什么?定义它(在使用它之前)或传递一个字符串,而不是变量名。

于 2012-06-01T04:39:47.817 回答
0

$('#dlg_srch_acnt')当您将 jquery 对象传递给您的函数时。所以你需要像这样用jquery包装你的id

function init_dlg(id, autoOpen, height, width, modal, fn_button1)
            {
                $(id).dialog({ // Jquery wrapping should be done . 
                    autoOpen:autoOpen,
                    height:height,
                    width:width,
                    modal:modal,
                    buttons:{
                        'OK':fn_button1,
                    },
                    close:fn_close
                });
            }
于 2012-06-01T04:35:17.303 回答
0

因为你只有一个按钮,所以在 fn_button1 之后删除逗号怎么样?

buttons:{
          'OK':fn_button1
        },
于 2012-06-01T04:39:59.923 回答
0

这里有几件事不对劲。

Working jsFiddle Demo

.1。正如 Rajat 指出的那样,$('#dlg_srch_acnt').('close');应该是$('#dlg_srch_acnt').dialog('close');

.2. Rajat关于传递函数名称几乎是正确的。应该是这样的(没有引号): init_dlg($('#dlg_srch_acnt'), false, '440', '480', true, fn_ok);

.3. 从 jQUI 对话对象内部引用外部函数时,您仍必须将它们包装在函数块中:

    buttons: {
        'OK': function(){
            fn_button1();
        }
    },
    close: function(){
        fn_close();
    }

*请注意,您没有在原始帖子中定义 fn_close*

这是完整的代码,添加了一些位以显示它可以正常工作(特别是,请注意 BOB 在 dlg 关闭时更改为 JANE):

HTML:

<input id="parnt_acnt" type="text" value="bob" />
<div id="dlg_srch_acnt">
    <p>Inside the dialog</p>
</div>

javascript/jQuery:

var acnt_name = "jane";

function init_dlg (id, autoOpen, height, width, modal, fn_button1 ) {
    id.dialog({
        autoOpen: autoOpen,
        height: height,
        width: width,
        modal: modal,
        buttons: {
            'OK': function(){
                fn_button1();
            }
        },
        close: function(){
            fn_close();
        }
    });
}

init_dlg( $('#dlg_srch_acnt'), false, '440', '480', true, fn_ok );

function fn_ok() {
    $('#parnt_acnt').val(acnt_name);
    $('#dlg_srch_acnt').dialog('close');
}

function fn_close() {
    $('#dlg_srch_acnt').dialog('close');
    alert('Close fn accessed');
}

Working jsFiddle Demo

于 2014-03-28T16:47:49.130 回答