.live() and checkbox labels #2383

Closed
benashby opened this Issue Sep 3, 2011 · 11 comments

Projects

None yet

7 participants

@benashby
benashby commented Sep 3, 2011

<label> tags do not respond to .live() bindings wether bound on page load or after injecting new objects.

It does work on a desktop, but not on mobile.

Here is the example that won't work on mobile: http://jsfiddle.net/benashby/MkxYh/

@sbounmy
sbounmy commented Nov 24, 2011

run into the exact same problem. Any suggestion to fix this ?

@sbounmy
sbounmy commented Nov 24, 2011

binding the event on the input works well !

$(":radio").bind("click", function(){
 //blabla...
})
@benashby

Yup, this is what I ended up doing. It's expensive and I am loath to do it, but until I come up with another solution this is what works.

@Andrey-I
Andrey-I commented May 5, 2012

hi
not sure is this fix or not...
try to change from return "false" to "true" for the label "vclick" handler in "mobile.checkboxradio" widget.

I mean 5296 line number in jQuery Mobile Framework 1.1.0 db342b1

@jaspermdegroot
Member

This seems to be working, without making any changes. See: http://jsbin.com/uripah/2/

You can bind to the input element (example 1) or the label (example 2). Both work.

For dynamically injected input elements (example 3) it is different though. In that case you can bind to the label, but not the input element itself. To be honest, I have no idea yet why that is.

Note that this fiddle loads an adjusted version of the JQM js file to refresf corners of controlgroup after injecting new item (this change is under review).

@Andrey-I
Andrey-I commented May 9, 2012

uGoMobi, thank you for your answer and useful example
All examples work at desktop browsers, but on device browser (HTC desire Z, android 2.3.3) only example 1 works properly. It may be necessary to use "vclick" instead of "click "
And in previous message I was not enough clear... I need to handle a "vclick" event.

@jaspermdegroot
Member

@gseguin @johnbender

Can one of you give this a look?
I created a JSBin to test with http://jsbin.com/ulohoj/8/

Thanks!

@johnbender
Contributor

@uGoMobi

Yah we simply don't trigger the event on the label. This should be a fairly simple fix but should be tested.

https://github.com/jquery/jquery-mobile/blob/master/js/jquery.mobile.forms.checkboxradio.js#L97

just need to trigger on the label.

@johnbender
Contributor

Update:

I'm a jackass. We need to figure out why the return false is in there. That's likely preventing the event from bubbling up to the document level where the live binding will work.

@gabrielschulhof
Contributor

git blame will take you down memory lane:

0a063c6 -> 6414e35 -> 38c1c24

It seems that @scottjehl moved the check/uncheck to touchend/mouseup to fix #753 (checkboxradio widget is too slow in mobile device) and that's when he introduced the return false for click. Later, @jblas replaced it with vclick, but the return false remained.

So, this is another place where we went with vclick in order to speed up responsiveness. It doesn't seem as though it's absolutely necessary to return false to that event.

@arschmitz
Member

@gabrielschulhof I looked into this a bit last week and came to the same conclusion but haven't had a chance to thuroughly test to make sure nice with the git blame to find the reason for its being introduced

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment