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

jquery - JavaScript button event handler not working - Stack Overflow

programmeradmin3浏览0评论

I am learning javascipt and now i have a piece of code but i am unable to get this to work, javascript isn't executed. I have already searched the web but i can't find an answer. Maybe you guys can help me with this.

HTML

<html>
<head>
    <title>Text Game</title>
     <script src=".2.4/jquery.min.js"></script>
     <script type="text/javascript" src="javascript.js"></script>
</head>
<body>
        <button><span id="click">0</span></button>
</body>
</html>

Javascript

// Variables
var waarde = {
  amount:2
};

$(document).ready(function() {
  updateValues();
});

function updateValues() {
  document.getElementById("click").innerHTML = waarde.amount;
}

$('#click').click(function() {
  waarde.amount = waarde.amount + 1;
  updateValues();
});

I am learning javascipt and now i have a piece of code but i am unable to get this to work, javascript isn't executed. I have already searched the web but i can't find an answer. Maybe you guys can help me with this.

HTML

<html>
<head>
    <title>Text Game</title>
     <script src="https://ajax.googleapis./ajax/libs/jquery/2.2.4/jquery.min.js"></script>
     <script type="text/javascript" src="javascript.js"></script>
</head>
<body>
        <button><span id="click">0</span></button>
</body>
</html>

Javascript

// Variables
var waarde = {
  amount:2
};

$(document).ready(function() {
  updateValues();
});

function updateValues() {
  document.getElementById("click").innerHTML = waarde.amount;
}

$('#click').click(function() {
  waarde.amount = waarde.amount + 1;
  updateValues();
});
Share Improve this question edited Jun 20, 2016 at 17:04 Alexander O'Mara 60.7k19 gold badges173 silver badges181 bronze badges asked Jun 20, 2016 at 16:40 StixsStixs 531 silver badge6 bronze badges 4
  • 11 As a JavaScript developer, I love the title. :) – Veera Commented Jun 20, 2016 at 16:41
  • 1 Do you get any errors? – XCS Commented Jun 20, 2016 at 16:41
  • 2 What do you mean by not working. Please specify. Also, always check your browser console while working with JS. For starters, there is no use of $(document).ready( if your .click() handler is outside. – Shaunak D Commented Jun 20, 2016 at 16:41
  • Note that you are mixing vanilla JavaScript with jQuery. jQuery is a library that extends or streamlines JavaScript and makes it more crossbrowser friendly. In jQuery you can select an element by its ID like so: $("#my-element"), just like you have done in $("#click").click(). You can do the same in your updateValues function, namely: $("#click").html(waarde.amount). (In this case you could even use the special keyword this, but if you're just learning you'll encounter that soon. – Bram Vanroy Commented Jun 20, 2016 at 16:51
Add a ment  | 

7 Answers 7

Reset to default 4

You have a couple of issues here:

Issue #1:

The element does not exist in the DOM to bind to yet, so do any or all of the following:

  1. Move your script tag to the footer, right before the closing </body> tag (generally best practice anyway).
  2. Use event delegation to bind to events on future elements.
  3. Put all the JavaScript in the ready handler.

Issue #2:

You should not bind a click event handler on an element inside a button, it will not work in specification pliant browsers as the button consumes the event, and it not propagated to children.

See the HTML5 spec for button for reference:

Content model:

Phrasing content, but there must be no interactive content descendant.

Instead, bind the click event handler to the button itself.

// Variables
var waarde = {
  amount: 2
};

$(document).ready(function(){
  updateValues();
});

function updateValues(){
  document.getElementById("click").innerHTML = waarde.amount;
}

// Binding to the button element using event delegation.
$(document).on('#button').click(function(){
  waarde.amount = waarde.amount + 1;
  updateValues();
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button id="button"><span id="click">0</span></button>

Also, unless you need the span element for something else, you could get rid of it and just use:

document.getElementById("button").innerHTML = waarde.amount;

You should put this code:

$('#click').click(function(){
  waarde.amount = waarde.amount + 1;
  updateValues();
});

Inside of $(document).ready(function(){}) function. $('#click') isn't in the DOM yet..

You have to write "Click" event in document.ready

    var waarde = {
        amount: 2
    };

    $(document).ready(function () {
        $('#click').click(function () {
            waarde.amount = waarde.amount + 1;
            updateValues();

        });
        updateValues();
    });

    function updateValues() {
        document.getElementById("click").innerHTML = waarde.amount;
    }

The problem with your code is you are not assigning an event handler when javascript loads the js file. It should be called in the ready function.

var waarde = {    
    amount:2    
};

$(document).ready(function(){    
    $('#click').click(function(){

        waarde.amount = waarde.amount + 1;    
        updateValues();    
    });

});

function updateValues(){    
    document.getElementById("click").innerHTML = waarde.amount;    
}

You should wrap it inside the ready method!

    // Variables
    var waarde = {
      amount:2
    };

    $(document).ready(function() {

      $('#click').click(function() {
        waarde.amount = waarde.amount + 1;
        updateValues();
      });
    });

   function updateValues() {
     document.getElementById("click").innerHTML = waarde.amount;
   }

Here's a codepen link http://codepen.io/anon/pen/vKXQza

Two points:

You should put your jQuery event listener inside the document.ready.

There is no guarantee to work click event on span.

// Variables
var waarde = {
amount:2
};

$(document).ready(function(){
updateValues();

$('#click2').click(function(){
waarde.amount++;
updateValues();
});

});

function updateValues(){
document.getElementById("click2").innerHTML = waarde.amount;
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<button id="click2">0</button>

You can see your problem solution is here

You are missing button click event in $(document).ready(function(){}(;

发布评论

评论列表(0)

  1. 暂无评论