0

我的错误框有一个小问题/错误。我将首先向您展示代码,然后再进行解释:我调用函数的位置:

$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 添加到“警告”中。我看到它的方式是,它将确保 JS onclick 工作。有人可以解释什么是错的。一个修复将不胜感激,并在键盘上节省大量的头撞。

4

4 回答 4

2

你有一个基本的引用问题。混合三种不同的语言,并试图让它发挥作用。您处于 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

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

于 2013-01-14T14:55:10.487 回答
2
onClick="this.style.display = 'none'; return false;"

这更容易,不是吗?

编辑:我同意 FAngel 更准确地说:

onClick="this.parentNode.style.display = 'none'; return false;"
于 2013-01-14T14:41:43.137 回答
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. ^^
于 2013-01-14T14:41:15.243 回答
1

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

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

所以,结束引号不会乱七八糟

此外,您可以使用 parentNode 而不是使用 ID(根本不需要分配 ID,但是a如果您使用其他元素包装您的标签 - 这部分将被破坏):

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

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

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

于 2013-01-14T14:44:25.807 回答