I have been browsing here and looking at similar problems, however none of the solutions seem to work. This is also my first posted question.
<table> <tr class="foo" onclick="openEmail1();">...</tr> <tr class="foo" onclick="openEmail2();">...</tr> <tr class="foo" onclick="openEmail3();"> <!-- this opens fine--> <td>From: Me</td> <td>Subject: Why won't this work?</td> <td>Date: <div style="display: none" id="email3">..email popup.. <div>...header box in email popup...</div> <div>...email body box in email popup...</div> <div> <button onclick="openForm();">Forward</button> <!-- this works fine--> <button onclick="closeEmail3();">Close</button> <!-- does not work--> </div> </div> <script> function openEmail3(){ document.getElementById("email3").style.display = "block"; } function closeEmail3(){ document.getElementById("email3").style.display = "none"; } </script> </td> </tr> </table>
Advertisement
Answer
Your code isn’t working because of event bubbling
I’ve updated your code to be more legible by putting your element in a var
var div = document.getElementById("email3");
Changing your button element to this will stop the default functionality
<button onclick="closeEmail3();event.stopPropagation()">Close</button>
Run the snippet below to see it in action.
var div = document.getElementById("email3"); function openEmail3(){ if (div.style.display === "none") { div.style.display = "block"; } else { div.style.display === "none" } } function closeEmail3(){ if (div.style.display === "block") { div.style.display = "none"; } }
<table> <tr class="foo" onclick="openEmail1();">...</tr> <tr class="foo" onclick="openEmail3();"> <!-- this opens fine--> <td>From: Me</td> <td>Subject: Why won't this work?</td> <td>Date: <div style="display: none" id="email3">..email popup.. <div>...header box in email popup...</div> <div>...email body box in email popup...</div> <div> <button onclick="openForm();">Forward</button> <!-- this works fine--> <button onclick="closeEmail3();event.stopPropagation()">Close</button> <!-- does not work--> </div> </div> </td> </tr> </table>