2012-09-04 54 views
0

我使用以下脚本函数从网格中获取行id。它工作正常。我在click函数中获得ID。但是,如果我试图获得该功能的外部,它将显示空。我需要外部的selr的点击功能值?这个怎么做?如何在JavaScript中为全局变量赋值?

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); 
}); 
+0

selr只会在点击功能的触发器上被分配。对于其余案例它将是空的。笏你需要准确吗? –

+0

@InternalServerError我需要在点击函数 – User

+0

之外获得selr的值。您只能得到该值1)如果之前调用了点击2)如果getcell方法返回适当的值。检查这两个 –

回答

3

的事情是,中selr价值得到只有当你启动click声明功能。所以点击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); 
}); 
+0

您不应该给'var'。更新了答案。 –

+0

@Praveen库马尔如果我声明像var window.selr ='';我得到意外的令牌错误 – User

+0

_“不是有一个简单的变量,而是将'selr'指定为全局变量”_ - 但是'selr'在OP代码中是_already_全局变量不是吗? (除非所有显示的代码都包含在另一个未显示的函数内) – nnnnnn

2

你分配一个点击处理程序中的价值,所以它不会设置直到用户实际点击

如果您测试selr并发现它仍然等于您初始化为('')的值,那么您知道用户尚未点击网格。

0

你不能得到SELR值点击功能之外,
如果数据网格是表ID,然后在$("#datagrid tr").eq(0)会给你的第一行

+0

_“你不能得到selr价值以外的点击功能”_ - 为什么不?这是一个全球变量。(只是在OP尝试在'alert'中使用它时,它仍然被设置为初始化的空字符串,因为还没有发生点击事件。) – nnnnnn

2

的问题是,第二个警报alert('alert out'+selr);被称为之前已经被执行了。点击功能。所以,因此没有设置selr的值。

如果您找到一种方法来规避这种情况,则可以通过使用window对象进一步确保访问全局变量。例如。

window.selr = null 
... 
window.selr = your value 

但是,通常应该避免这样的全局变量不惜一切代价。

+0

在执行点击功能之前,会调用第二个警报_definitely_。关于使用'window.'来访问全局变量,为什么在这种情况下有什么区别,当没有同名的局部变量映射到全局? – nnnnnn

+1

的确,我已经更新了答案。要使用'window'对象通常可以确保访问全局... – tmmllr

0

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

问题是变量里面发起这是触发的$("#datagrid")点击和alert('alert out'+selr);执行在DOM就绪事件的功能,最有可能前click事件触发。