2015-10-03 4 views
1

Я показываю пользователей онлайн. Когда я нажимаю на одного из пользователей, соответствующий пользователь должен отображаться в текстовом поле ниже. Я использую javascript для этого, но он принимает только первого пользователя. Когда я нажимаю второго пользователя, первый пользователь отображается в текстовом поле ниже. Почему он берет только первый массив?Функция javascript внутри цикла не работает

<?php 
    foreach($query as $row) 
    { 
    ?> 
     <input type="text" name="user" id="user" value="<?php echo $row->users;?> onclick="select_online()"> 
<?php 
    } 
    ?> 
    <script> 

    function select_online() 
    { 
     var user=document.getElementById("user").value; 
     document.getElementById("usersonline").value=user; 
    } 
    </script> 


Name:<input type="text" name="usersonline" id="usersonline"> 
+0

Вы видите результат 'foreach' на вашем html? –

ответ

1

Вы должны указать уникальное имя для своих входов. Вы не можете повторно использовать id = «пользователь» несколько раз, или javascript не сможет найти каждый элемент ввода.

Ниже будет лучше:

<?php 
    $id = 0; 
    foreach($query as $row) { 
     $id += 1; 
?> 
<input type="text" name="user" id="user-<?php echo "$i"; ?>" value="<?php echo $row->users;?> onclick="select_online(<?php echo "$i"; ?>)"> 
<?php 
    } 
?> 

<script> 
    // Move script outside loop 
    function select_online(i) { 
     var user = document.getElementById("user-" + i).value; 
     document.getElementById("usersonline").value = user; 
    } 
</script> 

Name:<input type="text" name="usersonline"id="usersonline"> 
+1

'select_online()' не был определен в цикле, в коде, предоставленном @manju. Существует скобка (''), которая закрывает цикл непосредственно перед тегом '

0
<input type="text" name="user" id="user" value="<?php echo $row->users;?> onclick="select_online()"> 

Вы устанавливаете идентификатор пользователя, как для всех пользователей, поэтому при использовании селектора document.getElementById («пользователь»), он всегда выбирает первую строку ,

Никогда не используйте один и тот же идентификатор для нескольких элементов. Это всегда вызовет ошибки.

3

Прежде всего, использование одного и того же идентификатора для многих элементов является ошибкой. Вы должны создать разнообразный атрибут id для генерируемых входов.

Во-вторых, вы должны использовать this, чтобы получить значение текущего элемента:

function select_online() 
{ 
    var user=this.value; 
    document.getElementById("usersonline").value=user; 
} 

document.getElementById("user") оператор всегда будет выбрать элемент, который id атрибут равен «пользователь», и он всегда будет таким же. Скорее всего, это не то, что вы хотите. Если вы правильно поняли, вы хотите получить value элемента с щелчком, как я уже упоминал ранее, вы можете достичь этого, используя выражение this, которое указывает на элемент, который был нажат в данный момент.

1

Согласно стандарту HTML, в документе должен быть уникальный идентификатор. Но в вашем случае вы генерируете несколько тегов ввода с id = user. Javascript's document.getElementById способен получить только элемент с id = user.

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

<?php foreach($query as $row) { ?> 
    <input type="text" name="user" id="user" value="<?php echo $row->users;?>" onclick="select_online(this)"> 
<?php } ?> 
<script> 
function select_online(elm) { 
    var user=elm.value; 
    document.getElementById("usersonline").value=user; 
} 
</script> 
Name:<input type="text" name="usersonline"id="usersonline"> 

Здесь OnClick, мы передаем refferance входного тега. Таким образом, мы можем получить референтный щелчок.

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