2014-01-29 2 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); 
      }); 
     }); 
    }); 
}); 

Мне нужно получить доступ к variable внутри функции onload. Как это передать?

+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

Если я разобрать ваш код правильно, то вы должны быть в состоянии использовать переменную, в которой вы хотите. Он находится в правильном объеме, и есть закрытие, которое будет поддерживать его.

Сделать глобальным, как и в предыдущем ответе, вызовет проблемы с одновременными вызовами - переменное значение может быть перезаписано следующим вызовом, и вы получите другое значение, когда получите его в своем .onload.

+0

Несомненно, гарантируют проблемы, они просто позволяют им. –

+0

У меня просто были неприятные ошибки с использованием глобальных переменных в обработчиках onclick. С тех пор я никогда не делаю этого, как правило, для предотвращения таких ошибок в будущем –

+0

Я выполняю поиск в функции 'onload' и смотрю и область переменной, и я не вижу« переменную ». Также, когда я пытаюсь получить значение в консоли, я получаю _ReferenceError: переменная не определена_ – supercalifragilistichespirali

Смежные вопросы