Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在$(document).ready()函数中设置的jQuery值_Javascript_Jquery_Asp.net_Telerik - Fatal编程技术网

Javascript 在$(document).ready()函数中设置的jQuery值

Javascript 在$(document).ready()函数中设置的jQuery值,javascript,jquery,asp.net,telerik,Javascript,Jquery,Asp.net,Telerik,我想在DOM完全加载后为对象设置值。问题是,在从文本框调用OnBlur和OnFocus事件后,我得到一个空指针异常。我做错了什么 javascript: $(document).ready(function () { var sumThursdayHrs = $('span[id*="lblThursdayHrs"]').last() }); var tempThursdayHrs = 0.0; function BlurThursdayHrs(sender, args) { sumT

我想在DOM完全加载后为对象设置值。问题是,在从文本框调用
OnBlur
OnFocus
事件后,我得到一个空指针异常。我做错了什么

javascript:

$(document).ready(function () {
    var sumThursdayHrs = $('span[id*="lblThursdayHrs"]').last()
});

var tempThursdayHrs = 0.0;
function BlurThursdayHrs(sender, args) { sumThursdayHrs.text(tempThursdayHrs + sender.get_value()); }
function FocusThursdayHrs(sender, args) { tempThursdayHrs = sumThursdayHrs.text() - sender.get_value(); }
标记:

<telerik:RadNumericTextBox ID="txtThursdayHrs" runat="server" NumberFormat-DecimalDigits="1"
        Width="25px" MinValue="0" Type="Number" DbValue='<%# Eval("ThursdayHrs") %>'>
        <ClientEvents OnBlur="BlurThursdayHrs" OnFocus="FocusThursdayHrs" />
</telerik:RadNumericTextBox>

错误:

Microsoft JScript运行时错误:“sumThursdayHrs”未定义


如果您已经在使用jquery,为什么不将事件绑定到jquery

$('span[id$="txtThursdayHrs"]:first').on("focus", FocusThursdayHrs)
          .on("blur", BlurThursdayHrs);
另外,在doc ready函数中声明这些函数,以便它们可以访问
sumtursdayhrs
,或者在同一位置使用匿名函数,而不是调用这些函数

例:

或者将
sumtursdayhrs
移动到全局对象。。。为了理智起见,我建议不要把它放在窗户里

而是定义一个全局名称空间来保存应用程序特定的全局变量。这被称为全球减排

--


该错误是由于作用域:

$(document).ready(function () {
    // sumThursdayHrs is a *local* variable to the function
    var sumThursdayHrs = $('span[id*="lblThursdayHrs"]').last()
});

// ... so this will fail because it is trying to use
// window.sumThursdayHrs (the property sumThursdayHrs on the window object),
// which is not set and thus the Reference Error
function BlurThursdayHrs(sender, args) {
    sumThursdayHrs.text(tempThursdayHrs + sender.get_value());
}
“简单修复”(可能有效,也可能无效)是:


愉快的编码。

正如您在标题中所说,这些值是在函数(ready event handler函数)中设置的。但是JavaScript有函数作用域,正如您通过使用
var
关键字将
sumtursdayhrs
声明为本地(更不用说“private”)变量一样,它是未从外部定义的。两种可能性:

  • 将sumtursdayhrs设置为全局变量(删除“var”)(并最终在外部声明它)。请注意,应尽可能避免使用全局变量,以避免命名冲突和co
  • 或者将使用它的所有函数放在同一范围内。请注意,这些函数也将不再全局可用,因此您需要在相同的上下文中设置模糊/聚焦处理程序(正如Patrick Scott所建议的)

我不确定您给出的代码示例是否在同一个包中,但如果您在
$(document).ready()中定义了一个变量,请知道该变量在闭包中。除此之外,它将是未定义的

那么,为什么不这样做:

$(document).ready(function () {
    var sumThursdayHrs = $('span[id*="lblThursdayHrs"]').last();

    var tempThursdayHrs = 0.0;

    function BlurThursdayHrs(sender, args) {
        sumThursdayHrs.text(tempThursdayHrs + sender.get_value());
    }

    function FocusThursdayHrs(sender, args) {
        tempThursdayHrs = sumThursdayHrs.text() - sender.get_value();
    } 
});
在上面的代码中,它应该选择您想要的值,因为所有内容都在
$(document.ready()
闭包中。此外,您已经将jquery对象
$('span[id*=“lblthurstayhrs”]
分配到一个变量中,因此它必须在jquery环境内部使用,而不是外部使用。。。总之,如果您正在使用jquery,请将其保存在jquery环境中


您所做的是,您已经与jquery签订了一份合同,您将通过执行
var sumtursdayhrs=$('span[id*=“lblthurstayhrs”]').last()来使用它的所有方法和属性。一旦你使用了
$(某物)
,就必须在jquery环境中使用它。

你确定$('span[id*=“lblthurstayhrs”]')选择了什么吗?@Andrey,是的,我在google chrome上测试过console@Engineer,都是客户端的。。。这两种方法是标记中定义的事件,它们用于Telerik的ASP.NET Ajax UI框架将客户端事件绑定到复杂的服务器端控件可能是非常复杂的+1正确方法,但是,
BlurThursdayHrs
/
FocusThursdayHrs
将不会看到
sumtursdayhrs
,直到它们在文档就绪处理程序中定义为止。@Andrey他正在这样做,只是使用teleriks语法。请注意,您正在创建一个隐含的全局变量,尽管这样做有效,但编码实践不好。应该避免使用全局变量,但如果我不能阻止您这样做,至少请遵循我关于全局减排的建议,并查看此答案,以了解关于第一个建议(删除var)的全局变量范围的更多信息
MyApp.tempThursdayHrs = 0.0;
function BlurThursdayHrs(sender, args) { MyApp.sumThursdayHrs.text(MyApp.tempThursdayHrs + sender.get_value()); }
function FocusThursdayHrs(sender, args) { MyApp.tempThursdayHrs = MyApp.sumThursdayHrs.text() - sender.get_value(); }
$(document).ready(function () {
    // sumThursdayHrs is a *local* variable to the function
    var sumThursdayHrs = $('span[id*="lblThursdayHrs"]').last()
});

// ... so this will fail because it is trying to use
// window.sumThursdayHrs (the property sumThursdayHrs on the window object),
// which is not set and thus the Reference Error
function BlurThursdayHrs(sender, args) {
    sumThursdayHrs.text(tempThursdayHrs + sender.get_value());
}
$(document).ready(function () {
    // Set the "global variable" sumThursdayHrs
    // "window." isn't technically required, but it is to show a point.
    window.sumThursdayHrs = $('span[id*="lblThursdayHrs"]').last()
});
$(document).ready(function () {
    var sumThursdayHrs = $('span[id*="lblThursdayHrs"]').last();

    var tempThursdayHrs = 0.0;

    function BlurThursdayHrs(sender, args) {
        sumThursdayHrs.text(tempThursdayHrs + sender.get_value());
    }

    function FocusThursdayHrs(sender, args) {
        tempThursdayHrs = sumThursdayHrs.text() - sender.get_value();
    } 
});