简体   繁体   中英

Event not triggering in Chrome

I am having an issue where clicking #target3 does not trigger the event handler. I think the issue is that the event is not propagating down to the <option> of the <select> element? The annoyance is that this snippet works in; IE8 and above, and Firefox, but does not work in Chrome?

 var target = 1; $("#target"+target).bind("click.clickEvent",function(){TargetClicked(this)}); function TargetClicked(ele) { if($(ele).prop("id") == ("target" + target)) { $("body").append("You clicked >> #" + $(ele).prop("id") + "<br>"); $(ele).unbind(".clickEvent"); target++; $("#target"+target).bind("click.clickEvent",function(){TargetClicked(this)}); } } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <p id="target1">Click here first</p> <p> <select id="target2"> <option>----</option> <option id="target3">target 3</option> </select> </p> 

This is from a very large project, so I would like to try and find a javascript / JQuery fix or workaround for this issue if possible as editing the HTML is not feasible.

You are passing this to the new event, which is window . Instead pass $("#target"+target) .

Note, workaround. To return expected result at chrome, you can use change event, .is() , select.options.selectedIndex , .eq()

 var target = 1; $("#target"+target) .bind("click.clickEvent change.clickEvent",function() { TargetClicked(this) }); function TargetClicked(ele) { if ($(ele).prop("id") == ("target" + target)) { $("body").append("You clicked >> #" + $(ele).prop("id") + "<br>" + ($(ele).is("select") ? "You clicked >> #" + $("option") .eq(ele[0].options.selectedIndex) .prop("id") : "") ); $(ele).unbind(".clickEvent"); target++; $("#target"+target) .bind("click.clickEvent change.clickEvent",function(e) { TargetClicked($("#target"+target)) }); } } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> </script> <p id="target1">Click here first</p> <p> <select id="target2"> <option>----</option> <option id="target3">target 3</option> </select> </p> 

jsfiddle https://jsfiddle.net/xy5rc1tu/1/

This is a known Chrome bug

https://bugs.chromium.org/p/chromium/issues/detail?id=26017

I fixed this issue by checking to see what type of element was being targeted, and then in the case of an <option> , I instead applied a change event instead of a click event.

The caveat is that this event has to go on the <select> element, not the <option> element, which in my case was not ideal.

if(!$("#target"+target).is("option"))
    $("#target"+target).click(function(){TargetClicked(this)});
else
    $("#target"+target).parent("select").change(function(){TargetClicked(this)});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM