【问题标题】:Variable for unique ids in JavaScript functionJavaScript函数中唯一ID的变量
【发布时间】:2012-03-28 18:33:51
【问题描述】:

我有一个在 PHP foreach 循环中调用的 onclick 事件,用于我需要单击其作者姓名的几个项目。只生成了一个名称,所以我知道每个 HTML 元素必须有一个唯一的 id。我已经有一个变量$objkey 用于循环中使用的计数器,所以我将它附加到 id。

<?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 的值传递给输入字段。我已将变量附加到输入的 id 和 name 元素(不确定是否有帮助)(更新:每个需要获取值的作者都有一个输入字段):

<?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>

如何在函数中为唯一 ID 创建一个变量,以便每个循环项生成不同的名称?

【问题讨论】:

  • 代码哪里有循环?
  • 您将生成closest1closest2 等...,但正在寻找closest
  • 对,我不知道如何将寻找“closest1,closest2”写入函数
  • 只需执行onClick="setAuthor(this)"并将函数的签名更改为function setAuthor(element) {,然后执行var author = element.innerHTML
  • 是的,这行得通。但是它将每个名称输入到相同的输入元素中。我已经编辑了原始帖子以显示每个作者都有一个与之关联的输入字段。我会在函数中添加一个计数器来分配函数吗?

标签: php javascript function loops onclick


【解决方案1】:

一种方法是将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>

但是,您不应该为每个元素设置onclick inline 和。您应该使用事件注册功能。

【讨论】:

  • 我错过了@outis 的那些编辑,谢谢。我看到 ID 正在传递,但作者值没有找到输入字段的方式。我需要更改输入字段的 id 吗?喜欢:&lt;input class="authors" id="author_name_{$objkey}" type="text" name="author_name" value="' . $author . '" /&gt;';
  • 我删除了 $objkey 周围的花括号并将其替换为:id="author_name_' . $objkey . '" type="text" name="author_name" value="' . $author . '" /&gt;'; 这可以将第一个名称保存到相关的输入字段中,但单击时不会填充其他名称任何输入。越来越近了。
  • 尤里卡!表单元素也必须是唯一的。我对表单 id 的输入元素采用了相同的方法: echo '
    '; id是在上面的代码中生成的。 document.forms["myform_"+id].elements["auth_"+id].value = author;感谢大家的帮助
猜你喜欢
  • 2020-09-23
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多