views:

26

answers:

1

I am loading a jQuery qtip on hover (as it usually works). Inside this qtip, there is a textbox and a button. On the click of this button, I want to do something with the value of this textbox. Somehow, jQuery's .val() function returns me the initial value of the textbox. Where am I going wrong?

jQuery code:

$(function() {
    $("#someplace").qtip({
        content: $("#popup"),
        hide: {
            fixed: true
        },
        position: {
            corner: {
                tooltip: 'topMiddle',
                target: 'bottomMiddle'
            },
            adjust: { 
                x:-30,
                y:-75
            }
        },
        style: {
        width:'100px',
            color:'white',
            name:'tspopup'
        }
    });

    $("#button_in_the_qtip").click(
        function () {
            var txt = $("#textbox_in_the_qtip").val();
            alert($("#textbox_in_the_qtip").attr('id')); // This returns "textbox_in_the_qtip"
            alert(txt); // This returns "abc" <---- Problem
        }
    );
});

HTML code for the popup qtip:

    <div style="display:none;" id="popup">
        <table cellpadding="5px" border="1" style="margin-top:12px; margin-bottom:12px; color:#fff; font-size:.7em;">
            <tr>
                <td>
                    <input type="text" id="textbox_in_the_qtip" value="abc" />
                </td>
                <td>
                    <button id="button_in_the_qtip">Add</button>
                </td>
            </tr>
        </table>
    </div>
A: 

I tried out your code and I think the problem might be the version of jQuery you are using. According to the qTip site you should be using jQuery 1.3.2. Your code works when you use the older version.

UPDATE:

The problem is that the call $("#button_in_the_qtip").click(...) is only affecting the button inside of the #popup div. The way qTip works is it actually creates a clone of the content div, and generates the html for the tooltip only when you hover over the target element. basically you need to add the click listener after the qTip is created.

To fix this move your button function inside of the qtip api callback onContentUpdate

api: {
        onContentUpdate: function(){
            $("#button_in_the_qtip").click(function () {
                var txt = $("#textbox_in_the_qtip").val();
                alert($("#textbox_in_the_qtip").attr('id')); // This returns "textbox_in_the_qtip"
                alert(txt); // This returns "abc" <---- Problem
            });
        }

The only last step is to remove the #popup from the page, which you can do right in the qtip options

content: $("#popup").remove(),

This is necessary because otherwise there would be duplicate elements on the page with the same ID, and jQuery doesn't like that.

Will
I was using 1.4.2, but I switched to 1.3.2 and tried but the code won't work. Did you make any changes?
Mikhil Masli
Hmm, that's funny. Thanks for the elaboration, but when I put the button click definition inside the onContentUpdate, it seems that the click handler doesn't get registered (attached) at all! None of the alerts work.
Mikhil Masli
Ah, nevermind. I got it to work! Thanks, Will! :)
Mikhil Masli