jpl schrieb:
> Hello,
> 
> I have a form with 5 checkboxes and 5 text inputs. Each checkbox is related 
> to a
> text input.
> I want a checkbox to be checked when its related text input is clicked... easy
> with jquery:
> $("#text_input_id").click( function() { $("#checkbox_id").get(0).checked = 
> true;
> } );
> 
> But I have a problem doing this in a loop. Here is a test case with
> jquery-1.0.4, FF 2.0:
> 
> <html> <head> <script src="jquery.js"> </script> </head> <body>
> <form>
>     <input type="checkbox" name="a" id="a" value="1" /> <input type="text"
> name="a_date" id="a_date" />
>     <input type="checkbox" name="b" id="b" value="1" /> <input type="text"
> name="b_date" id="b_date" />
> </form>
> <script>
> $(document).ready(function() {
>     for each (var name in ["a", "b"]) {
>         $("#"+name+"_date").click( function () {
>             $("#"+name).get(0).checked = true;
>             //alert(name);
>         });
>     }
> });
> </script>
> </body> </html>
> 
> It seems like the creation of the function to bind is defered: it is always 
> the
> last checkbox that is checked, whatever the text input I clicked on.
> 
> What is the problem? Should I do this in another way?
> How could I easily debug what is bound on document load?


First of all I have never seen a "for each in" loop in JavaScript. That 
should give you an error on the console. Second if you meant a for in 
loop: do not use these for Arrays.

For debugging try the excellent FireBug extension.

Here's how I would do it. You don't need that id overhead and let's say 
you give the containing form an id of "my-form":

$(function() {
     $('#my-form [EMAIL PROTECTED]"text"]').each(function() {
         $(this).focus(function() {
            $(this).prev('input').eq(0).get(0).checked = true;
         });
     });
});

Note that I use focus here for people using the keyboard (tab) instead 
of the mouse.


-- Klaus


_______________________________________________
jQuery mailing list
[email protected]
http://jquery.com/discuss/

Reply via email to