42

I am trying to change the CSS of one element on click of another element. I've searched a lot but nothing works perfectly. Currently I am using the below code, but it doesn't work. Can anyone tell me what I missed?

<div id="foo">hello world!</div>
<img src="zoom.png" onclick="myFunction()" />
function myFunction() {
    document.getElementById('foo').style.cssText = 'background-color: red; color: white; font-size: 44px';
}
5
  • Why are you not just setting a new class and have the styles in a stylesheet? Commented Jan 14, 2013 at 13:27
  • What browser are you testing it in? Are there errors in the JS console? Commented Jan 14, 2013 at 13:27
  • Use jQuery :), it is easier Commented Jan 14, 2013 at 13:29
  • @epascarello i am trying it on fiddle just to run this simple script Commented Jan 14, 2013 at 13:29
  • @Bandpay i am thinking too.. can you guide me any link please Commented Jan 14, 2013 at 13:30

9 Answers 9

44

Firstly, using on* attributes to add event handlers is a very outdated way of achieving what you want. As you've tagged your question with jQuery, here's a jQuery implementation:

<div id="foo">hello world!</div>
<img src="zoom.png" id="image" />
$('#image').click(function() {
    $('#foo').css({
        'background-color': 'red',
        'color': 'white',
        'font-size': '44px'
    });
});

A more efficient method is to put those styles into a class, and then add that class onclick, like this:

$('#image').click(function() {
  $('#foo').addClass('myClass');
});
.myClass {
  background-color: red;
  color: white;
  font-size: 44px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div id="foo">hello world!</div>
<img src="https://i.imgur.com/9zbkKVz.png?1" id="image" />

Here's a plain Javascript implementation of the above for those who require it:

document.querySelector('#image').addEventListener('click', () => {
  document.querySelector('#foo').classList.add('myClass');
}); 
.myClass {
  background-color: red;
  color: white;
  font-size: 44px;
}
<div id="foo">hello world!</div>
<img src="https://i.imgur.com/9zbkKVz.png?1" id="image" />

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

5 Comments

This answer uses jQuery, but the question was using plain Javascript. That's probably why it's also confusing some people who try to use it.
@orrd The OP tagged jQuery in the question, and I stated that this is a jQuery implementation of a solution. Who exactly has been confused by it? I see no comments asking for any clarification?
This doesn't answer the OP's question of why their code doesn't work.
@RobG That's because there isn't enough information in the OP to diagnose a problem. The example the OP gives works absolutely fine (jsfiddle.net/k9rL517m). My first assumption is that the myFunction() is not declared in scope of the onclick event attribute, ie. not within the window, but that would only be an assumption
A javascript code can be better than jquery
20

Try this:

CSS

.style1{
    background-color:red;
    color:white;
    font-size:44px;
}

HTML

<div id="foo">hello world!</div>
<img src="zoom.png" onclick="myFunction()" />

Javascript

function myFunction()
{
    document.getElementById('foo').setAttribute("class", "style1");
}

Comments

9
    <script>
        function change_css(){
            document.getElementById('result').style.cssText = 'padding:20px; background-color:#b2b2ff; color:#0c0800; border:1px solid #0c0800; font-size:22px;';
        }
    </script>

</head>

<body>
    <center>
        <div id="error"></div>
        <center>
            <div id="result"><h2> Javascript Example On click Change Css style</h2></div>
            <button onclick="change_css();">Check</button><br />
        </center>
    </center>
</body>

Comments

2

In your code you aren't using jquery, so, if you want to use it, yo need something like...

$('#foo').css({'background-color' : 'red', 'color' : 'white', 'font-size' : '44px'});

http://api.jquery.com/css/

Other way, if you are not using jquery, you need to do ...

document.getElementById('foo').style = 'background-color: red; color: white; font-size: 44px';

Comments

1

With jquery you can do it like:

$('img').click(function(){
    $('#foo').css('background-color', 'red').css('color', 'white');
});

this applies for all img tags you should set an id attribute for it like image and then:

$('#image').click(function(){
    $('#foo').css('background-color', 'red').css('color', 'white');
});

Comments

1

Man, see I don't know about JavaScript. But using :active css property, you can achieve the css properties you want on click!

Comments

0
<div id="foo">hello world!</div>
<img src="zoom.png" id="click_me" />

JS

$('#click_me').click(function(){
  $('#foo').css({
    'background-color':'red',
    'color':'white',
    'font-size':'44px'
  });
});

Comments

0

Try this:

$('#foo').css({backgroundColor:'red', color:'white',fontSize:'44px'});

Comments

0

This code seems to work fine (see this jsfiddle). Is your javascript defined before your body? When the browser reads onclick="myFunction()" it has to know what myFunction is.

Comments

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.