2014-11-11 4 views
3

Я хотел бы использовать локальную переменную родительского в дочернем окне. Я использовал parent.window.opener, но он возвращает undefined.Доступ к родительской локальной переменной в дочернем окне

Это мой код:

<script type="text/javascript"> 
var selectedVal; 

$(document).ready(function() { 
    //.... 
    //... 
    if ($(this).val() == "byActor"){ 
      $("#tags").focus(); 
      $("#tags").autocomplete({ 
      source: "actorsauto.php", 
      minLength: 2, 
      focus: function(event, ui){ 
        event.preventDefault(); 
        return false; 
      }, 
      select: function (event, ui){ 
         var selectedVal = ui.item.value; 
         alert(selectedVal); 
        } 
      }); 
    }); 

$('#btnRight').on('click', function (e) { 
     popupCenter("movieByactor.php","_blank","400","400"); 
}); 
</script> 
</body> 
</html> 

и это ребенок:

<body> 
<script type="text/javascript"> 

    var selectedVal = parent.window.opener.selectedVal; 
    alert(selectedVal); 

</script> 
</body> 
+0

Вы уверены, что вы хотите, как '' parent' и opener'? Кроме того, вы пытаетесь прочитать 'selectedValue' до того, как оно будет установлено в значение? –

ответ

6

Вы не можете - весь идея с локальными переменными заключается в том, что они включены доступны в любой области видимости, которую они объявляют, и функционируют внутри этой функции.

В вашем случае выберите selectedVal доступен только внутри этой функции декларации:

select: function (event, ui){ 
    var selectedVal = ui.item.value; 
    alert(selectedVal); 
} 

использовать его вне этой области вы должны сделать его глобальным путем присоединения его к окну:

window.selectedVal = 'somevalue'; 

Вы также можете сделать переменные неявно глобальными, оставив ключевое слово var - однако это плохая практика и не допускается в строгом режиме.

Это позволит вам получить доступ к window.selectedVal по:

window.opener.selectedVal // for windows opened with window.open() 
window.parent.selectedVal // iframe parent document 
+0

Спасибо за ваш ответ. Итак, вы имеете в виду, что мне нужно написать 'window.selectedVal = ui.item.value;' вместо 'var selectedVal = ui.item.value;'? – mOna

+0

Большое спасибо за ваше полное объяснение, это сработало :) – mOna

-2

попробовать это:

<body> 
    <script type="text/javascript"> 

     var selectedVal = window.opener.selectedVal; 
     alert(selectedVal); 

    </script> 
</body> 
+1

-1. Прочтите вопрос еще раз. – max

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