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

基本的な引用の問題があります。3つの異なる言語を混ぜて、それを機能させようとしています。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パーツを次のようにフォーマットしてみてください。

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

だから、引用符を閉じることで混乱することはありません

また、IDを使用する代わりに、parentNodeを使用できます(IDを割り当てる必要はありませんがたとえば、aタグを他の要素でラップすると、この部分は壊れます):

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

マークアップの場合、parentNodeは閉じる必要のあるdivを指します。そして、これはイベントハンドラーで、イベントが発生した要素を指します。

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

于 2013-01-14T14:44:25.807 に答える
1

これが問題です:

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

単一引用符 ( ') が単一引用符内にネストされています。これはエラーであり、onClick文字列が早期に終了します。そのうちの 1 つを二重引用符に変更する必要があります。

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 に答える