0

I am practicing JS on W3School, while trying out the "The Light Bulb" exercise I wanted to Change the functionality of the two buttons!

What i wanted to do was to add another button which on click will interchange the labels "Turn On the Light" and "Turn off the Light" along with the onclick actions.

<!DOCTYPE html>
<html>
<body>

<h1>What Can JavaScript Do?</h1>

<p><b><i>JavaScript can change HTML attributes.</i></b></p>

<p>In this case JavaScript changes the src (source) attribute of an image.</p>

<!-- Button1 (LHS) -->
<button id="buttonId1" onclick="document.getElementById('myImage').src='pic_bulboff.gif'">Turn off the light</button>

<!-- Image of the Bulb -->
<img id="myImage" src="pic_bulbon.gif" style="width:100px">

<!-- Button2 (RHS) -->
<button id="buttonId2" onclick="document.getElementById('myImage').src='pic_bulbon.gif'">Turn on the light</button>

<!-- Function to interchange label of both buttons along with the onclick actions -->
<script>
function clickButton() {
    <!-- initially button1 is for switching off the button, changing it to turn-on state -->
    document.getElementById('buttonId1').innerHTML = 'Turn on the light';
    document.getElementById('buttonId1').onclick="document.getElementById('myImage').src='pic_bulbon.gif' " ; 

    <!-- initially button2 is for switching on the button, changing it to turn-off state -->
    document.getElementById('buttonId2').innerHTML = 'Turn off the Light';
    document.getElementById('buttonId2').onclick="document.getElementById('myImage').src='pic_bulboff.gif' " ; 
}
</script>


<br>
<!-- Adding new button  to manipulate button functionality -->
<button onclick="clickButton()" >Do Not Click Me</button>
</body>
</html>

I tried to execute above code, it replaces the label on clicking "Do Not Click Me" button but does not changes the onclick actions!

I need help in achieving that functionality.

3 Answers 3

1

Try this:

<!DOCTYPE html>
<html>
<head>

<script type="text/javascript">
function onBulb(){
   document.getElementById('myImage').src='pic_bulbon.gif';
}

function offBulb(){
   document.getElementById('myImage').src='pic_bulboff.gif';
}
function swapButtons(){
   document.getElementById('buttonId1').innerText="Turn off the light";
   document.getElementById('buttonId1').onclick=offBulb;
   document.getElementById('buttonId2').innerText="Turn on the light";
   document.getElementById('buttonId2').onclick=onBulb;
}
</script>

</head>
<body>

<h1>What Can JavaScript Do?</h1>

<p>JavaScript can change HTML attributes.</p>

<p>In this case JavaScript changes the src (source) attribute of an image.</p>


<button id="buttonId1" onclick="onBulb()">Turn on the light</button>

<img id="myImage" src="pic_bulboff.gif" style="width:100px">

<button id="buttonId2" onclick="offBulb()">Turn off the light</button>

<button onclick="swapButtons()" >Swap Buttons</button>


</body>
</html>

Sign up to request clarification or add additional context in comments.

Comments

1

use this instead. . .

document.getElementById('buttonId1').onclick = function() { 
    document.getElementById('myImage').src='pic_bulbon.gif';
};
document.getElementById('buttonId2').onclick= function() { 
    document.getElementById('myImage').src='pic_bulboff.gif'
};

Comments

1

onclick must be setted to a function, not string..

function clickButton() {
    document.getElementById('buttonId1').innerHTML = 'Turn on the light';
    document.getElementById('buttonId1').onclick= function () {functionSwitch(true)}
    document.getElementById('buttonId2').innerHTML = 'Turn off the Light';
    document.getElementById('buttonId2').onclick= function() {functionSwitch(false)}
}

function functionSwitch(state) {
 
    if(state == false)
        document.getElementById('myImage').src='https://openclipart.org/image/2400px/svg_to_png/119749/power-off.png';
    else
        document.getElementById('myImage').src='http://icons.iconarchive.com/icons/paomedia/small-n-flat/1024/sign-check-icon.png';
}
<body>

  <h1>What Can JavaScript Do?</h1>

  <p><b><i>JavaScript can change HTML attributes.</i></b>
  </p>

  <p>In this case JavaScript changes the src (source) attribute of an image.</p>

  <!-- Button1 (LHS) -->
  <button id="buttonId1" onclick='functionSwitch(false)'>Turn off the light</button>

  <!-- Image of the Bulb -->
  <img id="myImage" src="http://icons.iconarchive.com/icons/paomedia/small-n-flat/1024/sign-check-icon.png" style="width:100px">

  <!-- Button2 (RHS) -->
  <button id="buttonId2" onclick='functionSwitch(true)'>Turn on the light</button>

  <br>
  <!-- Adding new button  to manipulate button functionality -->
  <button onclick="clickButton()">Do Not Click Me</button>
</body>

1 Comment

But when we used Button Action then onclick was mapped with a string and that time it worked so why It doesn't work for document.getElementById('buttonId2').onclick ?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.