I have the following problem with this code:
<button id="delete">Remove items</button>
$("#delete").button({
icons: {
primary: 'ui-icon-trash'
}
}).click(function() {
alert("Clicked");
});
If I click this button, the alert show up two times. It's not only with this specific button but with every single button I create.
What am I doing wrong?
Just like what Nick is trying to say, something from outside is triggering the event twice. To solve that you should use event.stopPropagation() to prevent the parent element from bubbling.
$('button').click(function(event) {
event.stopPropagation();
});
I hope this helps.
I've found that binding an element.click in a function that happens more than once will queue it so next time you click it, it will trigger as many times as the binding function was executed. Newcomer mistake probably on my end but I hope it helps. TL,DR: Make sure you bind all clicks on a setup function that only happens once.
Unless you want your button to be a submit button, code it as Remove items That should solve your problem. If you do not specify the type for a button element, it will default to a submit button, leading to the problem you identified.
I had the same problem and tried everything but it didn't worked. So I used following trick:
function do_stuff(e)
{
if(e){ alert(e); }
}
$("#delete").click(function() {
do_stuff("Clicked");
});
You check if that parameter isn't null than you do code. So when the function will triggered second time it will show what you want.
In that case, we can do the following
$('selected').unbind('click').bind('click', function (e) {
do_something();
});
I had the event firing two times initially, when the page get refreshed it fires four times. It was after many fruitless hours before I figured out with a google search.
I must also say that the code initially was working until I started using the JQueryUI accordion widget.
you can try this.
$('#id').off().on('click', function() {
// function body
});
$('.class').off().on('click', function() {
// function body
});
If you use
$( document ).ready({ })
or
$(function() { });
more than once, the click function will trigger as many times as it is used.
Strange behaviour which I was experienced also. So for me "return false" did the trick.
$( '#selector' ).on( 'click', function() {
//code
return false;
});
Related to Stepan's Answer.
in my case, i have both input
and label
in my .click()
listener.
i just replaced the label
to div
, it worked!
$("#id").off().on("click", function() {
});
Worked for me.
$("#id").off().on("click", function() {
});
If you're using AngularJS and your jQuery click event is INSIDE THE CONTROLLER, it will get disturbed by the Angular's framework itself and fire twice. To solve this, move it out of the controller and do the following:
// Make sure you're using $(document), or else it won't fire.
$(document).on("click", "#myTemplateId #myButtonId", function () {
console.log("#myButtonId is fired!");
// Do something else.
});
angular.module("myModuleName")
.controller("myController", bla bla bla)
in my case, i was using the change command like this way
$(document).on('change', '.select-brand', function () {...my codes...});
and then i changed the way to
$('.select-brand').on('change', function () {...my codes...});
and it solved my problem.
This can be caused for following reasons:
onclick
attribute on the element and also with jqueryevent.stopPropagation
).template inheritance
like extends
in Django
, most probably you have included the script in more than one file which are combined together by include
or extend
template tagsDjango
template, you have wrongly placed a block
inside another.So, you should either find them out and remove the duplicate import. It is the best thing to do.
Another solution is to remove all click
event listeners first in the script like:
$("#myId").off().on("click", function(event) {
event.stopPropagation();
});
You can skip event.stopPropagation();
if you are sure that the event is not bubbled.
This can as well be triggered by having both input
and label
inside the element with click listener.
You click on the label
, which triggers a click event and as well another click event on the input
for the label
. Both events bubble to your element.
See this pen of a fancy CSS-only toggle: https://codepen.io/stepanh/pen/WaYzzO
Note: This is not jQuery specific, native listener is triggered 2x as well as shown in the pen.
Source: Stackoverflow.com