CopyPastor

Detecting plagiarism made easy.

Score: 1; Reported for: Exact paragraph match Open both answers

Possible Plagiarism

Plagiarized on 2021-08-02
by Ernesto

Original Post

Original - Posted on 2014-07-02
by Douglas



            
Present in both answers; Present only in the new answer; Present only in the old answer;

yow broh, why dont you use aria. dont search for the parent of no body.
there is alot of ways to do it.
The user clicks your button/link whatever the user clicks, but you need to set an aria attribute call aria-controls in which you need to put the same value as the id the whatever you want to hide/show.
start by closing any open menu or so, then wait 150 milliseconds or so. just to prevent that your loop closes the one that needs to be opened
<!-- begin snippet: js hide: false console: true babel: true -->
<!-- language: lang-js -->


function App () { /** * togging menus */ function onClickHandler (e) { e.preventDefault(); const btnPressed = e.target; // first you need to check if there is a item toggled and stuff. const openMenus = document.querySelectorAll("[aria-expanded]"); if (openMenus.length) { Object.keys(openMenus).forEach(button => { const toggler = openMenus[button]; const menuId = toggler.getAttribute("aria-controls"); const menuToClose = document.getElementById(menuId); if (menuToClose && menuToClose !== null) { menuToClose.classList.remove("show"); menuToClose.setAttribute("aria-hidden", "true"); menuToClose.classList.add("hidden"); // now the button toggler.setAttribute("aria-expanded", "false"); } }) } //wait a minute to prevent conflicts setTimeout(()=>{ const toOpen = document.getElementById(btnPressed.getAttribute("aria-controls")); if (!toOpen) {return;} btnPressed.setAttribute("aria-expanded", "true"); toOpen.classList.add("show"); toOpen.setAttribute("aria-hidden", "false"); toOpen.classList.remove("hidden"); },[150]) } return ( <div className="accordion-example"> <ul aria-label="Accordion Control Group Buttons" className="accordion-controls"> <li> <button onClick={onClickHandler} aria-controls="content-1" aria-expanded="false" id="accordion-control-1">Apples</button> <div className="menu hidden" aria-hidden="true" id="content-1"> <p>Apples are a fine fruit often associated with good health, and fewer doctor's appointments.</p> <p>Example. An apple a day keeps the doctor away.</p> </div> </li> <li> <button onClick={onClickHandler} aria-controls="content-2" aria-expanded="false" id="accordion-control-2">Lemons</button> <div className="menu hidden" aria-hidden="true" id="content-2"> <p>Lemons are good with almost anything, yet are often have a negative connotation when used in conversation.</p> <p>Example. The bread from the french bakery is normally very good, but the one we bought today was a lemon.</p> </div> </li> <li> <button onClick={onClickHandler} aria-controls="content-3" aria-expanded="false" id="accordion-control-3">Kiwis</button> <div className="menu hidden" aria-hidden="true" id="content-3"> <p>Kiwis are a fun, under-appreciated fruit.</p> </div> </li> </ul> </div>) }


ReactDOM.render( < App / > , document.getElementById("page"));
<!-- language: lang-css -->
.hidden { display: none; }
.show { display: blocK }
<!-- language: lang-html -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="page"></div>
<!-- end snippet -->

React circa 2020 ----------------
In the `onClick` callback, call the [state hook's][1] setter function to update the state and re-render:
<!-- begin snippet: js hide: false console: true babel: true -->
<!-- language: lang-js -->
const Search = () => { const [showResults, setShowResults] = React.useState(false) const onClick = () => setShowResults(true) return ( <div> <input type="submit" value="Search" onClick={onClick} /> { showResults ? <Results /> : null } </div> ) }
const Results = () => ( <div id="results" className="search-results"> Some Results </div> )
ReactDOM.render(<Search />, document.querySelector("#container"))
<!-- language: lang-html -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>
<div id="container"> <!-- This element's contents will be replaced with your component. --> </div>
<!-- end snippet -->
[JSFiddle][2]
React circa 2014 ----------------
The key is to update the state of the component in the click handler using `setState`. When the state changes get applied, the `render` method gets called again with the new state:
<!-- begin snippet: js hide: false console: true babel: true -->
<!-- language: lang-js -->
var Search = React.createClass({ getInitialState: function() { return { showResults: false }; }, onClick: function() { this.setState({ showResults: true }); }, render: function() { return ( <div> <input type="submit" value="Search" onClick={this.onClick} /> { this.state.showResults ? <Results /> : null } </div> ); } });
var Results = React.createClass({ render: function() { return ( <div id="results" className="search-results"> Some Results </div> ); } });
ReactDOM.render( <Search /> , document.getElementById('container'));
<!-- language: lang-html -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.6.2/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/15.6.2/react-dom.min.js"></script>
<div id="container"> <!-- This element's contents will be replaced with your component. --> </div>
<!-- end snippet -->
[JSFiddle][3]

[1]: https://reactjs.org/docs/hooks-state.html [2]: https://jsfiddle.net/khx30pnv/ [3]: http://jsfiddle.net/kb3gN/15084/

        
Present in both answers; Present only in the new answer; Present only in the old answer;