【问题标题】:jQuery object never changing except for first timejQuery 对象从不改变,除了第一次
【发布时间】:2011-08-29 14:06:40
【问题描述】:

我在尝试修改的对象时遇到了问题。该对象具有一定数量的key_yyyy-mm-dd 格式的键。当某些输入字段失去焦点时,我会触发一个函数来修改对象。这个函数如下:

function updateHotelBooking()
    {
        $(".no_hotel").each(function(i) {
            var day = $(this).attr('name').match(/\[(.*?)\]/)[1];
            hotelBooking["key_" + day] = parseInt($(this).val());
        }); 
    }

.no_hotel 是触发函数的文本框,它们还提供了我想放入对象中的值。

现在,假设我将3 放在我的第一个文本框中,console.log 将返回以下对象:

Object
key_2011-08-21: 3
key_2011-08-22: 0
key_2011-08-23: 0
key_2011-08-24: 0
key_2011-08-25: 0

但是,下次我在文本框(或另一个应该触发该函数的文本框)中放入一些内容时,它确实会触发,但返回的对象保持不变。因此,它不会将第一个数字更改为 5,而是再次返回 3。

我不知道为什么。我的代码看起来很简单,day$(this).val() 中的 console.log 返回正确的值。只是我的对象没有更新。

有人知道吗?非常感谢!

编辑:

hotelBooking$(document).ready() 之后被初始化:

var hotelBooking = {};

调用updateHotelBooking的方法如下:

$(".roomrequest").blur(function()
{
    updateHotelBooking();
});

EDIT2:JSFiddle:http://jsfiddle.net/pBYeD/2/

【问题讨论】:

  • 触发updateHotelBooking的函数长什么样子? hotelBooking 变量在哪里/如何初始化?
  • 你如何设置hotelBooking?还有你怎么称呼你的对象?
  • 你能发布你的完整代码吗?
  • day 和您的 hotel_booking 对象声明在哪里?
  • 看看 .delegate() 。这个功能可能会解决你的问题。

标签: javascript jquery object


【解决方案1】:

它与控制台而不是您的代码有关,如果您将日志记录代码更改为此,您将看到您拥有正确的值:

    function updateHotelBooking()
    {
        $(".no_hotel").each(function(i) {
            var day = $(this).attr('name').match(/\[(.*?)\]/)[1];
            hotelBooking["key_" + day] = parseInt($(this).val());     
            **logObject(hotelBooking);**      
        });     
    }  


function logObject(hotelBooking){
        for(var i in hotelBooking){
            console.log(i+": "+hotelBooking[i]);
        }
        console.log("------");
    }

【讨论】:

  • 谢谢,我会在开发这部分时使用该功能一段时间。
  • 大声笑——这就是问题所在??我假设@cabaret 使用 chrome - 它的控制台有一些奇怪的显示对象的方式。在 Firefox + Firebug 中并非如此
【解决方案2】:

您确定问题不是来自调试器输出吗?

据我在我的 chrome 输出中看到的,如果我让小提琴保持原样,则对象在控制台中似乎没有改变(只是左边的数字需要 +3)。但是,如果我在之前或之后添加 console.log(hotelBooking["key_" + day]); 之类的内容,则会显示为更改。

【讨论】:

  • 我也觉得是这样
  • 可能是这种情况,它似乎在 Firefox 中运行良好。我猜应该早点测试过。我将在 FF 开发一段时间。谢谢!
  • 我认为 FF 总是更好地开发,firebug 是(恕我直言)比其他调试器更好的方式。
猜你喜欢
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
相关资源
最近更新 更多