2012-03-28 5 views
1

У меня есть событие onclick, вызванное в цикле PHP foreach для нескольких элементов, имя автора которых нужно щелкнуть. Создавалось только одно имя, поэтому я знаю, что у меня должен быть уникальный идентификатор для каждого элемента HTML. У меня уже есть переменная $objkey для счетчика, используемого в цикле, поэтому я добавил его к id.Переменная для уникальных идентификаторов в функции JavaScript

<?php 
//This is the item that appears in the loop. 
//Currently, clicking on each one that is generated only generates the first author name 
//The correct author as passed by PHP displays in the loop. 
//$closest is the value of the author's name. 
echo 'Click name to add <span><button id="closest' . $objkey . '" onClick="setAuthor()">' . $closest . '</button></span><br />'; 
?> 

Я сделал print_r('$objkey); и соответствующее значение для счетчика становится передается вместе.

Я хочу, чтобы значение этого элемента кнопки $closest передавалось в поле ввода. Я приложил переменную как входной идентификационному и имя элемента (не уверен, если это поможет) (UPDATE: Существует поле ввода для каждого из авторов, которые необходимы, чтобы получить значение):

<?php 
echo '<input id="author_name' . $objkey . '" type="text" name="author_name' . $objkey . '" value="' . $author . '" />'; 
?> 

Где я застрял с моей функции:

<script type="text/javascript">function setAuthor() { 
var author = document.getElementById("closest").innerHTML; 
window.alert(author); 
document.forms["myform"].elements["author_name"].value = author; }</script> 

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

+0

Где есть цикл в коде? –

+0

Вы будете генерировать 'ближайший1',' ближайший2' и т. Д., Но ищет 'ближайший' –

+0

Правильно, я не знаю, как писать ищет« ближайший1, ближайший2 »к функции – mattrweaver

ответ

2

Один из способов сделать это, чтобы передать this к функции setAuthor:

<?php 
//This is the item that appears in the loop. 
//Currently, clicking on each one that is generated only generates the first author name 
//The correct author as passed by PHP displays in the loop. 
//$closest is the value of the author's name. 
echo "Click name to add <button id='closest_{$objkey}' onClick='setAuthor(this)'>{$closest}</button><br/>"; 
?> 

При таком подходе, вы можете получить доступ к элементу в setAuthor:

<script type="text/javascript"> 
function setAuthor(el) { 
    var author = el.innerHTML, 
     id = el.id.replace(/^closest_/, ''); 
    if (console) { 
     console.log(author); 
    } 
    document.forms["myform"].elements["author_name_" + id].value = author; 
} 
</script> 

Однако, вы не должны» t установить onclick встроенный и для каждого элемента. Вы должны использовать функцию регистрации событий.

+0

Я пропустил эти изменения @outis, спасибо. Я вижу, что идентификатор передается, но значение автора не находит пути к полям ввода. Мне нужно изменить идентификатор для поля ввода? Как и для: ' ';' – mattrweaver

+0

Я удалил фигурные скобки вокруг $ objkey и заменили его следующим образом: 'id =" author_name_ '. $ objkey.' "type =" text "name =" author_name "value =" '. $ author.' "/> ';' Это позволяет сохранить первое имя в соответствующем поле ввода, но ни одно из других имен при щелчке не заполняет любые входы. Поближе. – mattrweaver

+0

Eureka!элемент формы также должен быть уникальным. Я сделал тот же подход, что и для элемента ввода для формы id: echo '

'; Идентификатор генерируется в приведенном выше коде. 'document.forms [" myform _ "+ id] .elements [" auth _ "+ id] .value = author;' Спасибо за всю помощь – mattrweaver

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