【问题标题】:passing parameters to jquery ui dialog将参数传递给 jquery ui 对话框
【发布时间】:2012-03-02 19:24:46
【问题描述】:

我像这样使用.data 来传递调用对话框的文本框的ID

$("#<%=txtDirProprio.ClientID%>").focus(function() 
{
         $("#<%=dialog.ClientID%>").dialog( "open" ).data("id","#<%=txtDirProprio.ClientID%>");
         return false;
});

这是对话框的代码

 $("#<%=dialog.ClientID%>").dialog({
                autoOpen: false,
                show: "blind",
                hide: "explode",
                width: 800,
                height:200,
                modal: true,
                buttons: 
                {
                    "Ajouter": function() {
                        $( this ).dialog( "close" );
                        StringBuilderDir($( this ).data("id"));
                    },
                    "Vider": function() {
                        $( this ).dialog( "close" );
                        $( $( this ).data("id") ).val("")
                    },
                    "Canceler": function() {
                        $( this ).dialog( "close" );
                    }
                },
                open: function() 
                { 
                    var dir = $( $( this ).data("id") ).val().split("-");
                    if(dir[0] != "")
                    {
                        $("#<%=dd_dialog_directionvp.ClientID%> option").each(function(index) 
                        {
                            if ($("#<%=dd_dialog_directionvp.ClientID()%> option")[index].text == dir[0]) 
                            {
                                $("#<%=dd_dialog_directionvp.ClientID()%>  option")[index].selected = true;
                            }
                        })
                     }
                 }
                 });

所以$ ( this ).data("id") 返回文本框的 id。除了在 open 函数中,它工作正常。 id 未定义

为什么它在按钮的功能中起作用,但在打开的功能中不起作用。好像不是同一个'this'

谢谢

【问题讨论】:

    标签: jquery-ui dialog this


    【解决方案1】:
    $("#<%=txtDirProprio.ClientID%>").focus(function() 
    {
             $("#<%=dialog.ClientID%>").data("id","#<%=txtDirProprio.ClientID%>").dialog( "open" );
             return false;
    });
    

    在调用.dialog('open');之前必须先设置数据

    【讨论】:

    • 谢谢!有用。我花了一个小时,你花了 30 秒哈哈。但我不明白。为什么它在 open 函数中不起作用?
    • 它不起作用,因为当您调用 .dialog('open') 时,对话框打开并执行 open 函数,然后它返回 jQuery 并调用下一个方法 .data() ,设置数据。所以因为 open 函数在设置数据之前执行,所以它在 open 时不可用;)
    • 如果要添加多个参数会发生什么?
    • 您只需使用 jQuery 的可链接性并执行 $('.selector').data('foo',1).data('bar',2).dialog('open') 之类的操作,或者将您的参数作为对象传递给 $('.selector').data('params',{foo:1,bar:2}).dialog('open')
    • 我实际上是出于不相关的原因来到这里,但知道dialog() 中的$(this) 指的是容器元素会很有帮助。在我的情况下,我试图将数据传递给按钮点击内的 ajax 调用,因此需要在点击事件内分配 var self = this,然后在 ajax 回调内分配 $(self).data('foo');
    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    相关资源
    最近更新 更多