2015-07-15 2 views
1

У меня возникли проблемы с этим. Я парень php, который почти ничего не знает о JS, поэтому, пожалуйста, пройдите на меня ;-)Как вы интегрируете строку в имя функции javascript?

Итак, у меня есть страница с 4-мя фреймами. В некоторых случаях мне нужны ссылки для одновременного изменения двух iframe. До сих пор я использовал этот скрипт, который я нашел в Интернете:

<script language="javascript"> 
function loadTwo(iframe1URL, iframe2URL) 
    { 
    parent.main.location.href=iframe1URL; 
    parent.right.location.href=iframe2URL; 
    } 
</script> 

Это работало отлично.

Однако теперь я сталкиваюсь с ситуацией, когда вместо изменения «основных» и «правильных» фреймов мне нужно изменить «left» и «main». Мне нужно также держать это выше для всех других случаев.

Итак, я это писал:

<script language="javascript"> 
var jssec = "<?php echo $section;?>"; 
var jslet = "<?php echo $flett;?>"; 

if(jssec == 'showlist' && jslet != '') 
    { 
    var panel1 = 'left'; 
    var panel2 = 'main'; 
    } 
else 
    { 
    var panel1 = 'main'; 
    var panel2 = 'right'; 
    } 

function loadTwo(iframe1URL, iframe2URL) 
    { 
    parent.panel1.location.href=iframe1URL; 
    parent.panel2.location.href=iframe2URL; 
    } 
</script> 

Первая часть работает отлично. Но сама функция больше не работает. Я предполагаю, что я не правильно интегрирую строки.

Я пробовал это, но прибегая к помощи результаты, которые я нахожу, что это за несколько разных случаях, например, когда строка содержит имя функции, которая не совсем то, что я здесь ...

Так как я могу получить panel1 & panel2 для работы в рамках этой функции?

Спасибо!

ответ

1

Использование нотации массива:

parent[panel1].location.href=iframe1URL; 
     ^------^ 

Это позволяет panel1 рассматривать как переменную, вместо «ключа» имя. например эти две идентичны в плане исполнения:

parent['panel1'] 
parent.panel1 
+1

[Обозначение кронштейна] (https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Property_Accessors#Bracket_notation) – Andreas

+0

Спасибо, Марк. Это позволяет * решить проблему, но теперь я сталкиваюсь с вторичной проблемой, когда в некоторых случаях я получаю неожиданные результаты (например, открытие ссылок в неправильных iframe) ... Это может быть не связано с этим хотя и, возможно, вызвано чем-то еще в коде, еще не уверенным на этом этапе, все еще рыть ... – asg

0

У вас проблема с объемом, казалось бы!

Обязательно объявите вары вне функций.

//declare them here!! 
var panel1; 
var panel2; 

if (blah) { 
    panel1 = "something"; 
    panel2 = "somethingelse"; 
} else { 
    //other option 
} 

//continue code 

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

Функция должна затем быть в состоянии прочитать их. Если это невозможно, передайте их через параметры функции, как и с другими данными.

+0

panel1 и panel2 уже были объявлены вне функций; loadTwo() должен иметь доступ к ним просто отлично. – ak2ln

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