MChan
MChan

Reputation: 7162

JQuery .trigger click event not working under IE

I am using the following code to route click events on an img tag to an input radio below it. The code works perfectly on Chrome and other browsers, but on IE (specifically IE 11) I must double click to get the radio selected instead of just single click to get the radio input selected. Can someone please tell me what I am doing wrong, missing here? Thanks

<script type="text/javascript">
   $(document).ready(function() {
       $('#Img1').click(function() {
          $('#radio1').trigger('click');
       });
   });
</script> 




      <div class="imagesPrev col four center">
        <label class="label_radio images" for="radio1">
      <div class="labelText">
            <img id="Img1"src="image1.gif" alt="Image 1" />
            <input type="radio" id="radio1" name="radio1" value="image1"/>      
      </div>
      <div style="height:10px;"></div>
             Image Title <br/>
        </label>
      </div>

Notes: - I also noticed that I don't have to double click as normal double click, but it has to be two clicks. Meaning one click then I can wait for like 10-15 seconds then do the 2nd click to get the click event routed to the radio input.

Upvotes: 1

Views: 4552

Answers (11)

Apoorv
Apoorv

Reputation: 620

I am facing the same issue and its very weird .... the workaround that is working for me is that instead of using the trigger function .. put the code which is executed in the trigger click event in a javascript function and call that function instead of trigger event ... example is given below. For this example i will use an alert in case of a click on the element with id radio1.

Event definition
$('#radio1').on('click',function () {
alert("Hi");
})
So Instead of using $('#radio1').trigger('click'); we can put the alert in a javascript function and call the javascript function where ever i am calling the trigger click event.

Javascript function 

function triggerClick(){
alert("Hi")
}

and just call this function(triggerClick()) where ever you are using $('#radio1').trigger('click');

Please let me know if this is helpfull

Upvotes: 0

Matija Mrkaic
Matija Mrkaic

Reputation: 1933

You have both your img and radio wrapped in label. HTML's default behavior is that click on label triggers radio/checkbox inside.

There are two ways you can solve your problem:

  1. Remove javascript function altogether.
  2. If there's additional reason for javascript, change your html markup, and move radio outside of the label. Also remove for attribute, cause it triggers radio selection. Something like this:

    <div class="imagesPrev col four center">
        <label class="label_radio images">
            <div class="labelText">
                <img id="Img1"src="image1.gif" alt="Image 1" />
            </div>
        </label>
        <input type="radio" id="radio1" name="radio1" value="image1"/>      
        <div style="height:10px;"></div>
        Image Title
    </div>
    

Upvotes: 1

Rahul K
Rahul K

Reputation: 413

<script type="text/javascript">
   $(document).on('click','.Img1',function()
   {
      var checkBox = $(".radio1");
      checkBox.prop("checked", !checkBox.prop("checked"));
   });
</script>

<img class="Img1" src="image1.gif" alt="Image 1" />
<input type="radio" class="radio1" name="radio1" value="image1"/>  

Upvotes: 0

Niels Steenbeek
Niels Steenbeek

Reputation: 4834

That's an easy one :).

The #img1 is encapsulated inside the

<label class="label_radio images" for="radio1">

So, without the jQuery part it's already working. Now when having the jQuery part, a single click will become a double click: 1) 'for' element of label_radio 2) the trigger in jQuery part

So, for x-browser, you should not wrap the img inside the label. Or try to cancel the event in $('#Img1').click(function(event) { ...

Upvotes: 1

Oren
Oren

Reputation: 5103

I think your problem may be with your markup. You have your image and click events inside a label.

According to w3schools: "...if the user clicks on the text within the element, it toggles the control." http://www.w3schools.com/tags/tag_label.asp

That toggle is perhaps messing with your javascript. Try moving the markup outside of the label and see if that helps.

Upvotes: 1

Joel Anderson
Joel Anderson

Reputation: 535

Your code example works fine in IE11 (desktop and metro). Is it possible that there is another click event on the page that is capturing and preventing the click event on the image? Maybe something is causing the page to lose focus (first click gets window focus second clicks the image)? Try putting an alert in the click function to see if the click is getting registered. If that's not the issue, try running the body of the function in the console to see if that is the issue. You might try other ways to trigger the event, as suggested by others. Or try the jQuery .triggerHandler("click") method.

Upvotes: 1

HClaudiu
HClaudiu

Reputation: 90

Try to use .click() instead of .trigger('click'):

<script> $(document).ready(function() { $('#Img1').click(function() { $('#radio1').click(); }); }); </script>

it should work, see here for more info

Upvotes: -1

Fals
Fals

Reputation: 6839

Just simple, you don't have to use any Jquery for this, just keep everything inside the label:

<label for="radio_btn">
   <img id="img"src="image1.gif" alt="Image here" />
   <input type="radio" id="radio_btn" name="radio1" value="image1"/>
</label>

Working here: http://jsfiddle.net/fals/3phf4/

Upvotes: 1

andyface
andyface

Reputation: 946

Have you tried using a label tag with a for attribute for this feature instead, this could solve your problem and be more browser compatible.

<label for="radio1"><img id="Img1"src="image1.gif" alt="Image 1" /></label>
<input type="radio" id="radio1" name="radio1" value="image1"/>

I can understand if this doesn't achieve what you need, but using this method should work using HTML markup instead of jQuery

relatively horrible jsfiddle demoing this: http://jsfiddle.net/andyface/d25KS/

Upvotes: 1

Christopher Marshall
Christopher Marshall

Reputation: 10736

http://jsfiddle.net/89wTk/

You should use .prop(); when dealing with checkbox/radio inputs.

   $(document).ready(function() {
       $('#Img1').click(function() {
           var checkBox = $("#radio1");
           checkBox.prop("checked", !checkBox.prop("checked"));
       });
   });

Upvotes: 3

Johnny
Johnny

Reputation: 851

I remember that some version of IE don't support clicking objects other than links or buttons :(

Perhaps try using:

$("#radio1").checked(true);

or

$("#radio1").selected(true);

as a work around

Upvotes: 1

Related Questions