如何在javascript中为全局变量赋值?

如何在javascript中为全局变量赋值?,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我使用以下脚本函数从网格中获取行id。它工作正常。我在单击功能中获取ID。但是如果我尝试获取函数的外部,它将显示为空。我需要selr外部的单击功能值?如何做到这一点 var selr=''; $(document).ready(function(){ $("#datagrid").click(function(e) { row = jQuery(e.target).closest('tr');

我使用以下脚本函数从网格中获取行
id
。它工作正常。我在
单击功能中获取ID。但是如果我尝试获取函数的外部,它将显示为空。我需要
selr
外部的单击功能值?如何做到这一点

var selr='';           
$(document).ready(function(){
               $("#datagrid").click(function(e) {
                 row = jQuery(e.target).closest('tr');
                 getId= row.attr("id");//for getting row number
                 selr = $("#datagrid").getCell(getId,'companyid');//getting Row ID
                 alert('alert in'+selr);
                 });
                  alert('alert out'+selr);
});

您正在单击处理程序中分配值,因此在用户实际单击之前不会设置该值


如果您测试
selr
,发现它仍然等于您初始化它的值(
'
),您就知道用户还没有单击网格。

您无法在单击函数之外获得selr值,
如果datagrid是表id,那么
$(“\datagrid tr”)。eq(0)
将为您提供第一行

问题是,
selr
的值仅在您启动
单击
功能时才会声明。因此,单击
jqGrid
后进行检查

$(document).ready()中的脚本将不起作用,并将显示为空,因为在文档准备好后,
selr
将不会设置

不要使用简单变量,而是将
selr
指定为全局变量。只需将
selr
替换为
window.selr

window.selr='';           
$(document).ready(function(){
    $("#datagrid").click(function(e) {
     row = jQuery(e.target).closest('tr');
     getId= row.attr("id");//for getting row number
     window.selr = $("#datagrid").getCell(getId,'companyid');//getting Row ID
     alert('alert in'+window.selr);
     });
     alert('alert out'+window.selr);
});

问题是第二个警报
警报('alert out'+selr)将在执行.click函数之前被调用。因此,不设置
selr
的值

如果您找到了一种方法来避免这种情况,那么可以进一步确保使用
窗口
对象访问全局变量。例如

window.selr = null
 ...
window.selr = your value
但是,通常应不惜一切代价避免此类全局变量。

您已经将该变量指定为全局变量


问题在于变量是
$(“#datagrid”)
警报('alert out'+selr)点击后触发的函数内部启动的在DOM就绪事件时执行,很可能在
单击事件触发器之前执行。

selr将仅在单击函数的触发器上分配。其余的箱子都是空的。您到底需要什么?@InternalServerError我需要在click函数外部获取selr的值。只有1)如果在之前调用click,并且2)如果getcell方法返回正确的值,您才能获得该值。检查这两个,您不应该给出
var
。更新了答案。@Praveen Kumar如果我声明like var window.selr='';我得到了一个意外的令牌错误“没有一个简单的变量,而是将
selr
分配为全局变量”-但是
selr
已经是OP代码中的全局变量了,不是吗?(除非显示的所有代码都包含在另一个未显示的函数中。)@Praveen Kumar我仍然得到空的value@user这样做。删除
$(document).ready()
中的警报,并将其分配给其他内容。例如,另一个函数,并将其绑定到链接的click函数。现在启动
jqGrid
单击功能,然后单击链接。它应该有用!!!:)第二个警报肯定会在执行click函数之前调用。关于使用
窗口。
访问全局变量,在这种情况下,当没有同名的局部变量隐藏全局变量时,为什么会有任何不同?是的,我已经更新了答案。使用
窗口
对象通常有助于确保访问全局…“您无法在单击功能之外获取selr值”-为什么不?这是一个全局变量。(只是当OP试图在
警报中使用它时,它仍然被设置为初始化为的空字符串,因为还没有发生单击事件。)