除了第一次,jQuery对象永远不会改变

cab*_*ret 5 javascript jquery object

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

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

.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
Run Code Online (Sandbox Code Playgroud)

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

我不知道为什么.我的代码看起来非常简单,和console.logday$(this).val()返回正确的价值观.这只是我的对象,没有得到更新.

有谁有想法吗?非常感谢!

编辑:

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

var hotelBooking = {};

调用updateHotelBooking的方法如下:

$(".roomrequest").blur(function()
{
    updateHotelBooking();
});
Run Code Online (Sandbox Code Playgroud)

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

kab*_*ros 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("------");
    }
Run Code Online (Sandbox Code Playgroud)