我在调试脚本时遇到一些问题,因为在调试模式下一切正常...但不是在运行时: 我在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"。
谁能告诉我我做错了什么?
答案 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);
});
在函数内部进行测试就像魅力一样。谢谢你的线索。