Странная проблема со скриптом jQuery - PullRequest
0 голосов
/ 24 июня 2010

У меня есть следующий скрипт jQuery:

$(document).ready(function() {
        $.ajax({
            url: 'temp.ajax.php',
            type: 'GET',
            success: function(data){
                $("#total_plus_aditional").val(data);                   
            }
        });

        tempTotal = parseFloat($("#total_plus_aditional").val());

        $("#cost_valoare").change(function(){                   
            var sum = parseFloat(tempTotal) + parseFloat($("#cost_valoare").val());
            $("#total_plus_aditional").val(sum);  
        });
});

Теперь вот что я хочу сделать: temp.ajax.php возвращает значение с плавающей запятой.Во-первых, это значение с плавающей запятой присваивается полю ввода в html, чтобы пользователь мог видеть число.Затем, если пользователь вводит число в другое поле ввода, я хотел бы сделать сумму этих двух чисел и переписать значение в первом поле ввода.

Проблема в том, что если я напишу число во втором поле, содержимое первого поля (с числом с плавающей запятой, возвращаемым вызовом ajax) превращается в NaN.

Почему это происходит?

PS Я сохраняю значение, возвращаемое вызовом ajax, в отдельной переменной, потому что я хотел бы иметь то же значение, если пользователь передумает и введетдругое значение во втором поле после того, как он уже введен.

1 Ответ

3 голосов
/ 24 июня 2010

Эта строка кода, которая инициализирует глобальную переменную "tempTotal", почти наверняка выполняется до того, как ваш вызов AJAX вернется с сервера. Таким образом, это NaN, потому что поле было пустым, когда оно запускалось.

Поместите эту строку кода в функцию "success" и посмотрите, что произойдет.

изменить & mdash; подождите & mdash; почему вы звоните parseFloat дважды на одно и то же значение? Не делай этого. Действительно, вся эта «временная» вещь бесполезна. Просто сделайте так, чтобы обработчик "change" сделал это:

var sum = parseFloat($('#total_plus_aditional').val()) + parseFloat($("#cost_valoare").val());

Если вы действительно должны сохранить значение, сделайте это в ответе AJAX:

        success: function(data){
            $("#total_plus_aditional").val(data);   
            tempTotal = parseFloat(data);                
        }

, а затем не вызывать parseFloat для него снова в обработчике "change".

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