最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Why doesn't innerHTML work with white spaces? - Stack Overflow

programmeradmin3浏览0评论

In the below html, the front button doesn't respond while the back button changes the content of the tag.

<!DOCTYPE html>
<html>
    <body>
        <p id ="para">Initial text. </p>
        <button onClick=document.getElementById('para').innerHTML="move front">
            front
        </button>
        <button onClick=document.getElementById('para').innerHTML="back">
            back
        </button>
    </body>
</html>

In the below html, the front button doesn't respond while the back button changes the content of the tag.

<!DOCTYPE html>
<html>
    <body>
        <p id ="para">Initial text. </p>
        <button onClick=document.getElementById('para').innerHTML="move front">
            front
        </button>
        <button onClick=document.getElementById('para').innerHTML="back">
            back
        </button>
    </body>
</html>

In the below, both the buttons change the content of the tag.

<!DOCTYPE html>
<html>
    <body>
        <p id ="para">Initial text. </p>
        <button onClick=document.getElementById('para').innerHTML="movefront">
            front
        </button>
        <button onClick=document.getElementById('para').innerHTML="back">
            back
        </button>
    </body>
</html>

Why does a bank space make a button unresponsive?

Share Improve this question asked Sep 11, 2016 at 9:31 Barath SankarBarath Sankar 3835 silver badges15 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 6

That is just invalid HTML.

You have to put quotes around your whole onclick attribute value, otherwise it will end at the space.

onClick = document.getElementById('para').innerHTML="move   // cut off here
front"    // a second (meaningless) attribute for your button tag.

Please consider this syntax:

<button onclick="document.getElementById('para').innerHTML='move front'">front</button>

You are probably having issues if you are using this technique.

I am sorry but this is not how you attach a click event to elements in modern javascript, at least if you want to work with what's called "good practices".

The better method would be to attach a click event to a desired element using javascript.

I will give you a short code example.

First the HTML - I will use your original HTML (modified a bit):

<!DOCTYPE html>
<html>
    <body>
        <p id ="para">Initial text. </p>
        <button id="frontBtn"> front </button>
        <button id="backBtn"> back </button>
    </body>
</html>

As you can see, I have removed your "onclick" events from the buttons, and assigned an id to each button.

Second, we will write some javascript to properly attach a click event to each one of the buttons, and of course execute the change of text as you originally was intending to do:

if you are familiar with jQuery then this will do:

$('#frontBtn').on('click',function(){
    $('#para').html('move front');
});
$('#backBtn').on('click',function(){
    $('#para').html('back');
});

This can also be done with vanilla (native) javascript:

document.getElementById("frontBtn").addEventListener("click", function(){
        document.getElementById("para").innerHTML = "move front";
});


document.getElementById("backBtn").addEventListener("click", function(){
        document.getElementById("para").innerHTML = "back";
});

Now we have a nicely structured event handler for each button, more code can be easily added.

As for where to insert your javascript ?

You can add the javascript to your html document by using script tags in your html document head like this:

<!DOCTYPE html>
<html>
   <head>
     <script type="text/javascript">
        // your code here..
     </script>
   </head>
    <body>
     ....
     ....

Or even better - create a separate script file and load it at the bottom of your html page like this:

<!DOCTYPE html>
<html>
   <head>
     ....
   </head>
    <body>
     ....
     ....
        <script type="text/javascript" src="scripts.js"></script>
    </body>
</html>

This is the better way to attach events to elements, using javascript.

Imagine if you try to write 50-100 lines of code inline ? impossible! but with an event handler function you can do it easily.

Things will basically work better and your project will be much easier for you to maintain.

Hope it helps a bit!

发布评论

评论列表(0)

  1. 暂无评论