2014-01-29 72 views
1

我有以下代码片段,并且我不清楚如何将它一直传递到onload函数。如何将变量传递给javascript中的回调函数

我试图在不同的地方定义它,但没有成功,特别是因为它的定义需要发生在传递给document.on方法的函数中,因为我想获得this引用的保留。

$(document).ready(function(e) { 
    $(document).on('click', "#someId", function(e) { 
     e.preventDefault(); 
     var variable = $(this).attr('name'); 

     chrome.fileSystem.chooseEntry({ 
      type: 'openFile', accepts:[{ 
       extensions: ['txt'] 
      }] 
     }, 
     function(fileEntry) { 
      if (!fileEntry) { 
       return; 
      } 
      fileEntry.file(function(file) { 
       var reader = new FileReader(); 
       reader.onload = function(e) { 
        ////******* how to access variable here? *******\\\\ 
        chrome.storage.local.set({'txt': e.target.result}); 
       }; 
       reader.readAsArrayBuffer(file); 
      }); 
     }); 
    }); 
}); 

我需要访问variableonload函数内。 我怎么能通过它?

+0

你不需要传递它。它在外部范围内,因此在范围链中自然可用。 –

+0

@ Beetroot-Beetroot,我在onload函数内部突出显示并寻找变量作用域,并且在那里我看不到变量。另外,当我尝试在控制台中获取值时,我得到ReferenceError:变量未定义 – supercalifragilistichespirali

+0

在这种情况下,我错误地理解了问题,或者您正在运行与上面显示的代码不同的代码。 –

回答

0

你可以利用closures这样做:

onload = function() { 
    var variable; 
    $(document).on('click', "#someId", function(e) { 
     variable = $(this).attr('name'); 
     // use variable here 
    }); 
    // and here 
}; 
+0

感谢这个工作。 – supercalifragilistichespirali

0

如果我正确地分析你的代码,那么你应该能够在您希望使用的变量。这是在正确的范围内,并有一个关闭,将保持活跃。

使其成为全球性的,就像在前面的回答将生成simultaneus调用问题 - 变量的值可能在明年调用所覆盖,你会得到不同的值,当你.onload得到它。

+0

当然,这不保证问题,它只是允许他们 –

+0

我刚刚在onclick处理程序中使用全局变量时出现了令人讨厌的错误,从此我永远不会这样做,只是为了防止此类错误在将来 –

+0

我正在'onload'函数内部着手,看着变量作用域,并且我在那里看不到'variable'。另外,当我尝试在控制台中获取值时,我得到_ReferenceError:variable is not defined_ – supercalifragilistichespirali

相关问题