Hello, I'm new to using jQuery. I was motivated by wanting to put some
panels on an ASP.NET website which would display additional info if a
link or button was clicked. I found a simple tutorial and mimicked
that and it works fine, but uses the specific ID of the hyperlink to
trigger the action. My page needs a list of items, and if you click on
one, extra information appears right below the item. So what I want to
do is capture clicks on any link, read the ID, and then use the ID to
identify the ID of the related asp:Panel element.

Here's the starting point:

   <script type="text/javascript">
            $(function() {
                $("#myButtonID").click(function(evt) {
                    evt.preventDefault();
                    $('#myPanelID').toggle('fast');
                });
            });
    </script>


If you click on the button rendered thusly:

    <input id="myButtonID" type="button" value="Hide/Show" />

The panel with id="myPanelID" is toggled (the CSS defines it so that
display is set to "none" by default.

But I want a list of these panels and buttons on my page, so I want
the code to be able to do this for any of the buttons I click.

It also works if instead of the button with the specific ID
"myButtonID" I change

$("#myButtonID").click(function(evt)

to

$("input").click(function(evt)

My impression is that this will cause the code to trigger if any input
element on the page is clicked, which is the first step to what I want
to do. My notion is that I can then get the value of the clicked
button and use that value to identify which panel to animate.

One of the FAQs on the jQuery site says I can get the value of the
button thusly:

var mybuttonval = $("input").val();

Then I could use a simple naming convention and use that value to
identify the Panel I want to animate. For example, if my button had
the value "ACME_widget-mach1" I could set the Panel I want to show
text in to "panel_ACME_Widget-mach1"

So I rewrote my code as follows:

    <script type="text/javascript">

            $(function() {
                $("input").click(function(evt) {
                    var panelID =  "panel_" + $("input").val();
                    evt.preventDefault();
                    $(panelID).toggle('fast');
                });
            });
    </script>

It appeared to work just like I hoped... until I put in a second
button/panel pair, with button ID= ACME_widget-mach2 and panel ID=
panel_ACME_widget-mach1. What happens is, regardless of which button I
click, only the first panel, the one with ID=panel_ACME_widget-mach1
is toggled.

It's as if when any button is clicked, the value I am getting is the
value of the first button in the collection. I put in an alert box
right after declaring the variable to test this:

                    alert(panelID);

and sure enough, the value that displays is the value assigned to the
first of these buttons on the page.

So what am I doing wrong here? How can I get the value of the button
that is actually clicked?

Thanks!

Alan

Reply via email to