在循环中访问多个id bug

时间:2013-01-14 14:31:30

标签: php javascript

我的错误框中有一个小问题/错误。我先给你看一下代码然后解释一下: 我称之为函数的地方:

$jsid = 0;
    foreach ($errors as &$value) {
        $jsid++;
        echo $jsid;
        error('', $value, $jsid);
    }

......这就是功能:

function error($title, $error, $id)
{
    echo "<div id='warning".$id."' class='errorbox' style='border-style:solid; border-width: 1px; border-color:#FFF;'>
            <a style='float: left;' onClick='document.getElementById('warning".$id."').style.display = 'none';' aria-label='Exit View As...'  class='_7fy'></a>";
            if($title !== '') {
               echo "<h3>$title</h3>";
            }
            echo "<p>$error</p></div>";
}

我所做的是因为我知道我会有多个具有相同ID的元素,所以我添加了foreach以便它们会有所不同然后在函数中,我会添加id传递给'warning' 。我看到它的方式是,它将确保JS onclick工作。有人可以解释什么是错的。一个修复程序将非常受欢迎,并在键盘上保存了很多头部。

4 个答案:

答案 0 :(得分:2)

onClick="this.style.display = 'none'; return false;"

这更容易,不是吗?

编辑:我同意FAngel更准确:

onClick="this.parentNode.style.display = 'none'; return false;"

答案 1 :(得分:2)

你有一个基本的引用问题。混合使用 THREE 不同的语言,并努力使其发挥作用。您处于PHP模式,转储出包含javascript的html,并且所有内容都使用相同的引号。而不是这种丑陋的垃圾,使用HEREDOC,或者至少从混合中删除PHP,所以你只需要html + js,例如:

echo <<<EOL
<div id="warning{$id}" class="errorbox" style="border-style:solid; border-width: px; border-color:#FFF;">
    <a style="float: left;" onClick="document.getElementById('warning{$id}').style.display = 'none';" aria-label="Exit View As..."  class="_7fy"></a>

EOL

- 或 -

?>
<div id="warning<?php echo $id ?>" class="errorbox" style="border-style:solid; border-width: px; border-color:#FFF;">
    <a style="float: left;" onClick="document.getElementById('warning<?php echo $id ?>}').style.display = 'none';" aria-label="Exit View As..."  class="_7fy"></a>

<?php

注意引号如何“自然地”工作,而不需要任何转义。

答案 2 :(得分:1)

这是问题所在:

onClick='document.getElementById('warning".$id."').style.display = 'none';'
        ^                        ^ - the string ends here

你有单引号(')嵌套在单引号内,这是一个错误,并导致onClick字符串提前终止。您需要将其中一个更改为双引号。

onClick=\"document.getElementById('warning".$id."').style.display = 'none';\"
        ^^ change to double-quotes, and escape for being inside PHP quote. ^^

答案 3 :(得分:1)

尝试格式化您的onclick部分,如下所示:

onClick=\"document.getElementById('warning".$id."').style.display = 'none';\"

所以,收尾报价不会有任何混乱

此外,您可以使用parentNode(不需要分配ID,,如果您将a标记与其他元素包装在一起,而不是使用ID)这部分将被打破):

onClick=\"this.parentNode.style.display = 'none';\"

如果是标记,parentNode将指向您需要关闭的div。事件处理程序中的这个指向事件发生的元素。

https://developer.mozilla.org/en-US/docs/DOM/Node.parentNode