获取JQuery对话框值以编写隐藏问题代码

获取JQuery对话框值以编写隐藏问题代码,jquery,asp.net,jquery-ui-dialog,Jquery,Asp.net,Jquery Ui Dialog,我有一个简单的jQuery对话框弹出窗口,它收集地址信息,我需要将这些信息传递给代码,以便在用户输入后保存到数据库中。我已经搜索了数百个示例,并且在下面这一点上是最新的,但似乎无论我做什么,所创建的JSON字符串对于我试图传递的所有字段都显示为“未定义”。我的结论是,我在jQuery中构建JSON字符串的方法是错误的,但是在尝试了许多不同的方法之后,它们都不起作用。我尝试过通过id访问字段,但如下面所示,通过id使用各种方式访问类和类。下面是代码片段。有人能看出我哪里出了错吗 <scrip

我有一个简单的jQuery对话框弹出窗口,它收集地址信息,我需要将这些信息传递给代码,以便在用户输入后保存到数据库中。我已经搜索了数百个示例,并且在下面这一点上是最新的,但似乎无论我做什么,所创建的JSON字符串对于我试图传递的所有字段都显示为“未定义”。我的结论是,我在jQuery中构建JSON字符串的方法是错误的,但是在尝试了许多不同的方法之后,它们都不起作用。我尝试过通过id访问字段,但如下面所示,通过id使用各种方式访问类和类。下面是代码片段。有人能看出我哪里出了错吗

<script type="text/javascript">
    $(function () {
        $('#dialog').dialog({
            draggable: true,
            resizeable: false,
            autoOpen: false,
            height: 700,
            width: 550,
            modal: true,
            top: 0,
            left: 0,
            title: 'Edit Information',
            buttons: {
                'Save': function () {                        
                    $('#ibSaveInfo').click();
                },
                'Cancel': function () {
                    $(this).dialog('close');
                }
            }
        }).parent().css('z-index', '1005');
    });

    $(document).on("click", "#ibSaveInfo", function () {
        var inputArray = new Array;
        var idx = 0;

        inputArray[idx] = 'Address1:' + $("#dialog").find("#txtAddress1").val();

        idx++;
        inputArray[idx] = 'Address2:' + $("#txtAddress2").val();

        idx++;
        inputArray[idx] = 'city:' + $("txtcity").val();

        etc, etc

        var inputArrayList = "{ inputArray: " + JSON.stringify(inputArray) + "}";
        $.ajax({
            type: "POST",
            dataType: "json",
            contentType: "application/json",
            url: "Address.aspx/SaveInfo",
            data: inputArrayList,
            success: function (data) {
                //debugger;

                if (data.d.indexOf("Error") != -1) {
                }
                else {
                    $("#ResultLabel").show();
                    $("#ResultLabel").text("Sum of all the contents is: " + data.d);
                }
            },
            error: function (e, ts, et) {
                //debugger;
                alert(ts);
            }
        }); //ajax func end
    });

    $(document).ready(function () {
        $("#ibEdit").click(function (e) {
            $('#dialog').dialog('option', 'position', [e.pageX + 10, e.pageY + 10]);
            $('#dialog').dialog('open');
        });
    });


<div id="dialog" style="padding-left: 10px; padding-bottom: 15px;">
    <asp:TextBox runat="server" ID="txtAddress1" ClientIDMode="Static" />
    <asp:TextBox runat="server" ID="txtAddress2" ClientIDMode="Static" />
    <asp:TextBox runat="server" ID="txtCity" ClientIDMode="Static" />
    etc, etc
</div>

$(函数(){
$('#dialog')。dialog({
真的,
可调整大小:false,
自动打开:错误,
身高:700,
宽度:550,
莫代尔:是的,
排名:0,
左:0,,
标题:“编辑信息”,
按钮:{
“保存”:函数(){
$('#ibSaveInfo')。单击();
},
“取消”:函数(){
$(this.dialog('close');
}
}
}).parent().css('z-index','1005');
});
$(文档)。在(“单击”上,“#ibSaveInfo”,函数(){
var inputArray=新数组;
var-idx=0;
inputArray[idx]=“地址1:”+$(“#对话框”).find(“#txtAddress1”).val();
idx++;
inputArray[idx]=“Address2:”+$(“#txtAddress2”).val();
idx++;
inputArray[idx]=“城市:”+$(“txtcity”).val();
等等等等
var inputArrayList=“{inputArray:+JSON.stringify(inputArray)+“}”;
$.ajax({
类型:“POST”,
数据类型:“json”,
contentType:“应用程序/json”,
url:“Address.aspx/SaveInfo”,
数据:inputArrayList,
成功:功能(数据){
//调试器;
if(data.d.indexOf(“错误”)!=-1){
}
否则{
$(“#结果标签”).show();
$(“#ResultLabel”).text(“所有内容的总和为:”+data.d);
}
},
错误:功能(e、ts、et){
//调试器;
警报(ts);
}
});//ajax func end
});
$(文档).ready(函数(){
$(“#ibEdit”)。单击(函数(e){
$('dialog')。dialog('option','position',[e.pageX+10,e.pageY+10]);
$('dialog')。dialog('open');
});
});
等等等等

我刚刚创建了一个完整的代码:

它似乎与
city
form字段除外,因为它缺少a#,并且其大小写不正确(应该有大写字母C)

如果您的所有字段仍然被破坏,那么是页面上您没有提供的其他内容导致了问题

希望这有帮助

Dave

编辑: 刚刚注意到您正在使用asp文本框。使用asp时,元素的ID将更改。如果您无意从服务器访问这些值,请尝试使用常规的
文本框

而不是这个

idx++;
        inputArray[idx] = 'city:' + $("txtcity").val();
您应该只使用array.push函数

var inputArray = [];
inputArray.push('Address1:' + $("#txtAddress1").val());
inputArray.push('Address2:' + $("#txtAddress2").val();)
inputArray.push('city:' + $("txtcity").val());
在这里,不要在代码中调用clickfunction,只需给它另一个函数的引用即可

$(function () {
        $('#dialog').dialog({
            draggable: true,
            resizeable: false,
            autoOpen: false,
            height: 700,
            width: 550,
            modal: true,
            top: 0,
            left: 0,
            title: 'Edit Information',
            buttons: {
                'Save': save(),
                'Cancel': function () {
                    $(this).dialog('close');
                }
            }
        }).parent().css('z-index', '1005');
    });

function save(){
  var inputArray = [];
  inputArray.push('Address1:' + $("#txtAddress1").val());
  inputArray.push('Address2:' + $("#txtAddress2").val());
  inputArray.push('city:' + $("#txtCity").val()); 
  var json = { "inputArray": inputArray};
        inputArrayList = JSON.stringify(json);
//ajax stuff
}
此外,您还有2个文档就绪函数,因此可以将它们组合起来。 这两种方法都是声明文档就绪的方法

$(document).ready(function(){});
$(function () {});

虽然这些都是有效的代码改进点,但它不能回答页面出错的原因。@DaveHogan你是对的,我希望其中一个可以解决他的问题,因为我看不出他在做什么有任何其他问题。
刚刚注意到你在使用asp文本框。使用asp时,元素的ID会发生变化
——这就是为什么他添加了属性clientdmode=“Static”刚刚注意到您正在使用asp文本框。我把答案写在下面。Asp控件在项目运行时更改其id,如果您不是从服务器端访问值,请确保使用常规文本框。
$(document).ready(function(){});
$(function () {});