jQuery объект никогда не меняется, за исключением первого раза - PullRequest
5 голосов
/ 29 августа 2011

У меня возникла проблема с объектом, который я пытаюсь изменить. Объект имеет определенное количество ключей в формате 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 снова.

Понятия не имею, почему. Мой код кажется довольно простым, и console.log из day и $(this).val() возвращает правильные значения. Это просто мой объект, который не обновляется.

У кого-нибудь есть идеи? Большое спасибо!

EDIT:

hotelBooking инициализируется сразу после $(document).ready():

var hotelBooking = {};

Метод, который вызывает updateHotelBooking, следующий:

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

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

Ответы [ 2 ]

1 голос
/ 30 августа 2011

это связано с чем-то, связанным с консолью, а не с вашим кодом; если вы измените код регистрации на этот, вы увидите, что у вас есть правильные значения:

    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("------");
    }
1 голос
/ 30 августа 2011

Вы уверены, что проблема не в выходных данных отладчика?

Насколько я вижу в своем выводе chrome, если я оставлю скрипту как есть, объект не изменится вконсоль (только число слева занимает +3).Однако, если я добавлю что-то вроде console.log(hotelBooking["key_" + day]); непосредственно перед или после, оно будет отображаться как изменяющееся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...