循环内的javascript函数不工作
我正在显示在线用户。当我单击某个用户时,相应的用户应显示在下面的文本框中。我使用javascript来实现这一点,但它只需要第一个用户。单击第二个用户时,第一个用户显示在下面的文本框中。为什么只使用第一个数组循环内的javascript函数不工作,javascript,php,codeigniter,Javascript,Php,Codeigniter,我正在显示在线用户。当我单击某个用户时,相应的用户应显示在下面的文本框中。我使用javascript来实现这一点,但它只需要第一个用户。单击第二个用户时,第一个用户显示在下面的文本框中。为什么只使用第一个数组 <?php foreach($query as $row) { ?> <input type="text" name="user" id="user" value="<?php echo $row->users;?>
<?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">
您应该为输入指定一个唯一的名称。不能多次重用id=“user”,否则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">
您应该为输入指定一个唯一的名称。不能多次重用id=“user”,否则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">
首先,对许多元素使用相同的id是一个错误。您应该为生成的输入设置不同的id
属性
其次,您应该使用this
获取当前元素的值:
function select_online()
{
var user=this.value;
document.getElementById("usersonline").value=user;
}
document.getElementById(“用户”)
语句将始终选择id
属性等于“用户”的元素,并且该元素将始终相同。很可能,这不是你想要的。如果我理解正确,您希望获得单击元素的值
,因此正如我前面提到的,您可以使用这个
表达式来实现它,该表达式指向当前单击的元素 首先,对许多元素使用相同的id是一个错误。您应该为生成的输入设置不同的id
属性
其次,您应该使用this
获取当前元素的值:
function select_online()
{
var user=this.value;
document.getElementById("usersonline").value=user;
}
document.getElementById(“用户”)
语句将始终选择id
属性等于“用户”的元素,并且该元素将始终相同。很可能,这不是你想要的。如果我理解正确,您希望获得单击元素的值
,因此正如我前面提到的,您可以使用这个
表达式来实现它,该表达式指向当前单击的元素 根据HTML标准,文档中应该有唯一的id。但是在您的例子中,您正在生成多个id=user的输入标记。Javascript的文档.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">
根据HTML标准,文档中应该有唯一的id。但是在您的例子中,您正在生成多个id=user的输入标记。Javascript的文档.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">
您在html上看到foreach
结果了吗?您在html上看到foreach
结果了吗?select_online()
没有在循环中定义,在@manju提供的代码中。在
标记前面有一个括号(
)用来关闭循环。@LazarevAlexandr:我知道。我已经抓到了。我看到您进行了编辑,导致了冲突。我以前没有这样做过,我也无法解决它,但我认为这和我做的编辑是一样的。顺便说一句,你的解决方案比我的好。坚持住:)我把我的留在那里,因为它演示了如何使id字段唯一。哦,我投你一票<在@manju提供的代码中,循环中未定义code>select_online()
。在
标记前面有一个括号(
)用来关闭循环。@LazarevAlexandr:我知道。我已经抓到了。我看到您进行了编辑,导致了冲突。我以前没有这样做过,我也无法解决它,但我认为这和我做的编辑是一样的。顺便说一句,你的解决方案比我的好。坚持住:)我把我的留在那里,因为它演示了如何使id字段唯一。哦,我投你一票!