【问题标题】:Submitting a multi dimensional array with jQuery and YUI使用 jQuery 和 YUI 提交多维数组
【发布时间】:2011-01-26 09:22:07
【问题描述】:

嘿,伙计们,这真的让我很烦恼,所以如果你能帮助我,那就太棒了。

我正在使用 jQuery 和 YUI,我正在尝试通过 json 向 php 发送一个多维数组,但由于某种原因,我无法从跨度中抓取文本放入数组中!去搞清楚!无论我如何尝试,我似乎都无法添加它。如果我手动将测试数据添加到 WeekDays0 = 并且可行,但由于某种原因它不会从跨度中获取文本!

点击警报有效并输出跨度信息,但我似乎无法设置数组值

function checkDay(checkbox) {
    var checked = '0';
    if ($('#' + checkbox).is(':checked')) {
        checked = '1';
    } else {
        checked = '0';

    }
    return checked;
}


var WeekDays = new Array(7);
WeekDays[0] = new Array();
WeekDays[0][0] = checkDay('chxMonday');
WeekDays[0][2] = $('#results22Monday').text();
WeekDays[1] = new Array();
WeekDays[1][0] = checkDay('chxTuesday');
WeekDays[1][3] = new Array();
WeekDays[1][4] = $('#results22Tue').text();
WeekDays[2] = new Array();
WeekDays[2][0] = checkDay('chxWednesday');
WeekDays[2][5] = $('#results22Wednesday').text();
WeekDays[3] = new Array();
WeekDays[3][0] = checkDay('chxThursday');
WeekDays[3][6] = $('#results22Thursday').text();
WeekDays[4] = new Array();
WeekDays[4][0] = checkDay('chxFriday');
WeekDays[4][7] = $('#results22Friday').text();
WeekDays[5] = new Array();
WeekDays[5][0] = checkDay('chxSaturday');
WeekDays[5][8] = $('#results22Saturday').text();
WeekDays[6] = new Array();
WeekDays[6][0] = checkDay('chxSunday');
WeekDays[6][9] = $('#results22Sunday').text();



WeekDays = YAHOO.lang.JSON.stringify(WeekDays);


$('#btnUpdateSettings').click(function () {
    alert($('#results22Tue').text());
    $.ajax({
        data: {
            contactID: d.act_contactID,
            apiCPolicy: $('[name=txtCpolicy]').val(),
            apiNewRegistrations: $('[name=rdoRegister]').val(),
            apiInterval: $('[name=cboBooking]').val(),
            apiMaxDate: $('[name=cboMaxDate]').val(),

            apiTimes: WeekDays,

            method: 'updateWebBooking',
            dataType: 'json'
        },
        success: function () {
            console.log("welldone, you've updated!");
        },
        error: function () {
            alert("ooooppps!");
        }
    });
});

当我检查控制台徽标时,我得到下面的屏幕,显示数组为空。

我已经标记了我希望文本出现但它不存在的空间!真是太气人了。所有其他数组结果也是如此

你真正能帮助我的任何想法

更新

警报确实有效并输出如下所示,但它只是没有添加到数组中!

所以我仍然不知道它没有被添加。

更新

这真的很奇怪,我确实将索引设置为下面的索引,但是当我第一次将代码粘贴到问题中时,索引发生了变化!奇怪的!无论如何,当数组索引正确时它不起作用!

var WeekDays = new Array(7);
            WeekDays[0] =  new Array();
            WeekDays[0][0] = checkDay('chxMonday');
            WeekDays[0][1] = $('#results22Monday').text();
            WeekDays[1] =  new Array();
            WeekDays[1][0] = checkDay('chxTuesday');
            WeekDays[1][1] = new Array();
            WeekDays[1][1]  = $('#results22Tue').text();
            WeekDays[2] =  new Array();
            WeekDays[2][0] = checkDay('chxWednesday');
            WeekDays[2][1] =  $('#results22Wednesday').text();
            WeekDays[3] =  new Array();
            WeekDays[3][0] = checkDay('chxThursday');
            WeekDays[3][1] = $('#results22Thursday').text();
            WeekDays[4] =  new Array();
            WeekDays[4][0] = checkDay('chxFriday');
            WeekDays[4][1] = $('#results22Friday').text();
            WeekDays[5] =  new Array();
            WeekDays[5][0] = checkDay('chxSaturday');
            WeekDays[5][1] = $('#results22Saturday').text();
            WeekDays[6] =  new Array();
            WeekDays[6][0] = checkDay('chxSunday');
            WeekDays[6][1] = $('#results22Sunday').text();

更新

好的,我觉得我需要给你们一个更全面的问题,让你们了解我正在尝试做的事情,因为可能有一种更有说服力的方法来实现这一目标。下面的图片可能是展示这一点的最佳方式。当我按下更新表格按钮时,它会在右侧的空白区域填充一个表格,其中包含复选框,这些复选框是在表格中较早设置的特定增量。我想保存这些复选框以及当天的复选框是否已被选中。如果未选中这一天,我希望清除该表,以便那天没有数据发送到数据库。这就是为什么我想保存在一个多维数组中然后序列化它们,但我不能让它工作

【问题讨论】:

  • 删除这个 WeekDays[1][1] = new Array();

标签: jquery multidimensional-array yui


【解决方案1】:

请尝试提醒 - $('#results22Monday').text();
因为,在我看来,.text() 是罪魁祸首。
如您所见,JSON 是以正确的格式(7,2 数组)创建的,并且 checkDay 函数正在正确填充值。

所以请检查

  1. 哪个 HTMLElement 是 results22Monday 和其他?
  2. 有文字吗?还是需要 val()?

哦,我们想要一个 7 x 2 阵列,对吗?

如果是这样,子数组的索引都是错误的。
尝试更改这一行并告诉我第一个值是否显示在 firebug 控制台上?

WeekDays[0][2] = $('#results22Monday').text();

WeekDays[0][1] = $('#results22Monday').text();

看到我们想要 results22Monday 作为子数组的第二个元素(即在索引 1 处)

我也会像这样重写你的代码的顶部,因为它更干净。

function checkDay(checkbox) {
    return ($('#' + checkbox).is(':checked')) ? '1' : '0';
}


var WeekDays = new Array(7);
WeekDays[0] = [checkDay('chxMonday'), $('#results22Monday').text()];
WeekDays[1] = [checkDay('chxTuesday'), $('#results22Tue').text()];
WeekDays[2] =  [checkDay('chxWednesday'), $('#results22Wednesday').text()];
WeekDays[3] =  [checkDay('chxThursday'), $('#results22Thursday').text()];
WeekDays[4] =  [checkDay('chxFriday'), $('#results22Friday').text()];
WeekDays[5] =  [checkDay('chxSaturday'), $('#results22Saturday').text()];
WeekDays[6] =  [checkDay('chxSunday'), $('#results22Sunday').text()];

//as its not a good practice to re-initialise the same variable
var jsonedWeekDays = YAHOO.lang.JSON.stringify(WeekDays);

【讨论】:

  • 检查上面的更新,但是当我提醒文本时,它确实会返回值。
  • 尝试了上面的代码,但仍然无法正常工作,我将在上面发布一个更全面的解释,说明我正在尝试做什么,看看是否可以从不同的角度进行处理跨度>
【解决方案2】:

我不知道,但您可能想使用 .serializeArray() 而不是 YAHOO.lang.JSON.stringify()

你的函数checkDay()最好这样写,

function checkDay(checkbox) {
    return $('#' + checkbox).is(':checked') ? 1 : 0;
}

对于您的问题,我认为您只是忘记将其包装在 .ready() 处理程序中

演示

with .ready() - 工作正常,提醒文本。

without .ready() - 没有提醒文本。

如果问题仍然存在,也许我们需要您提供更多信息/代码,您认为这些信息/代码可以帮助我们解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多