运行时的javascript行为与debug不同

时间:2017-09-22 16:20:44

标签: javascript jquery asp.net-mvc

我在调试脚本时遇到一些问题,因为在调试模式下一切正常...但不是在运行时: 我在javascript中有这个功能:

function Add() {
    ... 
    $('#Value').val($('#Value').val()); // Value is a div class="input"
    ...
    $.get('@Url.Action("GetSomeData", "_Shared")', { id: parseInt($('#DataID').val()) },
            function (result) { $('#SomeData').val(result); });

    if ($('#SomeData').val() == "x") {
        $('#tmp').val($('#Value').val());
    }
    else {
        $('#tmp').val("0");
    }
    ...
}

并且控制器_Shared只返回一个属性:

public string GetSomeData(int id)
{
    return unitOfWork.DataRepository.GetByID(id).Something;
}

当我在" if"中使用断点时会发生什么,$('#SomeData').val()具有正确的值但是如果我删除了断点,请写一个console.log($('#SomeData').val())并执行,它总是空的,$('#tmp').val()总是" 0"。 谁能告诉我我做错了什么?

3 个答案:

答案 0 :(得分:0)

您是否在加载事件上将事件绑定放在Jquery上?

$(function(){
//Your code here
});

如果没有,也许在运行时,jquery还没有找到你的元素(#Value),所以它将返回空值。

答案 1 :(得分:0)

这是一个同步问题。 $.get是异步的,您传递的回调将在完成后运行,与编写代码的内联内联。因此,您的function (result) { $('#SomeData').val(result); });正在if ($('#SomeData').val() == "x") { ...

之后运行

您可以通过添加代码在$.get之后运行回调来解决此问题:

$('#Value').val($('#Value').val()); // Value is a div class="input"
...
$.get('@Url.Action("GetSomeData", "_Shared")', { id: parseInt($('#DataID').val()) },
        function (result) {
            $('#SomeData').val(result);
            if ($('#SomeData').val() == "x") {
                $('#tmp').val($('#Value').val());
            }
            else {
                $('#tmp').val("0");
            }
        });

...

注意,当你添加断点时它会起作用,因为它可以让你的非$.get时间完成并执行。

答案 2 :(得分:0)

好的,我找到了解决这种异步性问题的方法:

$.get('@Url.Action("GetSomeData", "_Shared")', { id: parseInt($('#DataID').val()) },
    function (result) {
        if (result == "x") {
            $('#tmp').val($('#Value').val());
        }
        else {
            $('#tmp').val("0");
        }
        $('#SomeData').val(result); 
    });

在函数内部进行测试就像魅力一样。谢谢你的线索。