Значение переменной изменяется один раз из функции щелчка в jQuery - PullRequest
0 голосов
/ 28 августа 2009

это продолжение моего предыдущего вопроса. Поскольку я только что вошел в тот день без Open Id, я не знаю, как войти в эту учетную запись и редактировать дальше. Поэтому я создал новую учетную запись с поддержкой Open Id и разместил ее как новый вопрос.

Теперь у меня есть такой код. Внутри события onclick значение сохраняется в $ selectedId правильно. Но когда я пытаюсь передать это значение в URL, я не получаю правильное значение. Передано последнее значение в цикле for.

 <script type="text/javascript">

 $(document).ready(function(){

 <?php foreach ($Forms as $r): ?>

    $("<li><a id='<?=$r['Form']['id'];?>' data-attr='Formentries'  href='#'><?=$r['Form']['name']?></a></li>").appendTo("#headers").click(function () {

    <?php $selectedFormId=$r['Form']['id'];?>

    alert("selId: "+<?php echo $selectedFormId;?>); //here the selected id is alerted
   });
 alert("outside the loop"+<?php echo $selectedFormId;?>); //here the last value in the loop is alerted
 });

После выхода из функции щелчка значение $ selectedFormId меняется на последнее значение в массиве. Может кто-то помочь мне с этим?

На самом деле, я пытаюсь добиться этого, я перечисляю набор форм в виде ссылок, и когда я выбираю ссылки, я хочу, чтобы их идентификатор сохранялся в переменной php. Я хочу, чтобы он был сохранен в php-переменной coz после выбора формы. У меня есть возможность экспортировать записи в форму по другой ссылке

 <a href="localhost/FormBuilder/reports/export/<?php echo $selectedFormId;?>" class="thickbox button" title= "Export" >Export</a> . 

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

 formid=$(this).attr("id");

но я не знаю, как передать это значение в функцию экспорта в контроллере.

Ответы [ 4 ]

0 голосов
/ 28 августа 2009

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

То, что вам, возможно, следует сделать, это установить в событии click переменную на стороне клиента. Затем установите onclick на ссылку экспорта, чтобы создать URL-адрес и перенаправить его на основе значения локальной переменной.

Возможно, это не лучшее решение, но это был бы один из вариантов.

0 голосов
/ 28 августа 2009

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

0 голосов
/ 28 августа 2009

когда вы объявляете его внутри блока, чтобы он не был доступен снаружи;

либо вы объявляете это перед блоком $(document).ready, либо заканчиваете его использование внутри самого этого блока.

0 голосов
/ 28 августа 2009

Насколько я вижу, вы устанавливаете $ selectedFormId внутри каждого цикла в итерации, поэтому код присваивания будет установлен только при срабатывании события click.

Следовательно, логически, когда вы выходите из цикла, $ selectedFormId будет последним элементом в массиве. Вы хотите поставить условие вокруг задания? Не забывайте, что код на стороне сервера будет выполняться независимо! Это не будет заботиться о клиентских условиях или закрытиях!

if (something){
    <?php $selectedFormId=$r['Form']['id'];?>
}

И, повторяя вышеизложенные комментарии, вы действительно должны пытаться добиться разделения кода. Вышесказанное действительно тег суп !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...