Start by reading this, to make sure you understand the difference between
initializing (once) and opening (many times) a dialog:
http://blog.nemikor.com/2009/04/08/basic-usage-of-the-jquery-ui-dialog/

That's my best guess as to the source of your problem, by just looking at
your code. If you put together a minimal live sample page, for example on

http://jsbin.com/

that would facilitate review.

- Richard

On Fri, Jul 31, 2009 at 4:32 PM, nodell <neil.odell...@gmail.com> wrote:

>
> Hi All,
>
> Having a problem with a dialog within a tab.
>
> Here's the tab code:
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://
> www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml";>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> <title>Untitled Document</title>
> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/
> libs/jquery/1.3.2/jquery.min.js"></script>
> <script type="text/javascript" src="js/jquery-
> ui-1.7.2.custom.min.js"></script>
> <link href="css/global.css" media="screen" rel="stylesheet" type="text/
> css" />
> <link href="css/ui-lightness/jquery-ui-1.7.2.custom.css"
> media="screen" rel="stylesheet" type="text/css" />
> <script type="text/javascript">
>        $(function() {
>                $("#tabs").tabs();
>        });
>        </script>
> </head>
>
> <body>
>
> <div id="tabs">
>        <ul>
>                <li><a href="rows1.html">Teachers</a></li>
>                <li><a href="rows2.html">Students</a></li>
>
>        </ul>
> </div>
>
> </body>
> </html>
>
> Here's the rows1.html code:
>
> script type="text/javascript" src="js/editUserDialog.js"></script>
> <table width="150">
>    <tbody><tr>
>        <th width="75">Name</th>
>
>        <th width="75">Email</th>
>    </tr>
>
>
> <tr class="evenRow">
>    <td width="60">
>        K&nbsp;Bush    </td>
>    <td width="60">
>        k...@moremusic.com    </td>
>
>    <td width="15"><a href="javascript:editUser('3', 'K', 'Bush',
> 'k...@moremusic.com');">edit</a></td>
>    <td width="15"><a href="javascript:deleteUser(3);">delete</a></td>
> </tr>
>
>
> <tr class="oddRow">
>    <td width="60">
>        M&nbsp;Gore    </td>
>    <td width="60">
>
>        mg...@depechemode.com    </td>
>    <td width="15"><a href="javascript:editUser('6', 'M', 'Gore',
> 'mg...@depechemode.com');">edit</a></td>
>    <td width="15"><a href="javascript:deleteUser(6);">delete</a></td>
> </tr>
>
>
>
>
> </tbody></table>
> <div id="userUpdate" title="Update User Info">
>        <p id="validateTips"></p>
>
>        <form>
>        <fieldset>
>                <label for="firstname">First Name</label>
>                <input type="text" name="firstname" id="firstname" value=""
> class="text ui-widget-content ui-corner-all" />
>                <label for="lastname">Last Name</label>
>                <input type="text" name="lastname" id="lastname" value=""
> class="text ui-widget-content ui-corner-all" />
>        <label for="email">Email</label>
>                <input type="text" name="email" id="email" value=""
> class="text ui-
> widget-content ui-corner-all" />
>        <input type="hidden" name="userid" id="userid" value=""/>
>
>        </fieldset>
>        </form>
> </div>
>
> The rows2.html code is exactly the same except for the table rows.
>
> The editUserDialog.js is:
>
> $.ui.dialog.defaults.bgiframe = true;
>        $(function() {
>
>                var userid = $("#userid"),
>            firstname = $("#firstname"),
>            lastname = $("#lastname"),
>                        email = $("#email"),
>                        allFields =
> $([]).add(userid).add(firstname).add(lastname).add
> (email),
>                        tips = $("#validateTips");
>
>
>                function updateTips(t) {
>                        tips.text(t).effect("highlight",{},1500);
>                }
>
>                function checkLength(o,n,min,max) {
>
>                        if ( o.val().length > max || o.val().length < min )
> {
>                                o.addClass('ui-state-error');
>                                updateTips("Length of " + n + " must be
> between "+min+" and "+max
> +".");
>                                return false;
>                        } else {
>                                return true;
>                        }
>
>                }
>
>                function checkRegexp(o,regexp,n) {
>
>                        if ( !( regexp.test( o.val() ) ) ) {
>                                o.addClass('ui-state-error');
>                                updateTips(n);
>                                return false;
>                        } else {
>                                return true;
>                        }
>
>                }
>
>        $("#userUpdate").dialog({
>                        bgiframe: true,
>                        autoOpen: false,
>                        height: 300,
>            width: 350,
>                        modal: true,
>                        buttons: {
>                                'Update': function() {
>                                        var bValid = true;
>
>  allFields.removeClass('ui-state-error');
>                    bValid = bValid && checkLength
> (firstname,"firstname",1,100);
>                    bValid = bValid && checkLength(lastname,"lastname",
> 1,100);
>
>                    if (bValid) {
>
>                                $('#userUpdate').html('update
> complete');
>                                $('#userUpdate').dialog
> ('option','buttons',{ "Close": function() { $(this).dialog
> ('close'); } });
>                                        }
>                                },
>                                'Cancel': function() {
>                                        $(this).dialog('close');
>
>                                }
>                        },
>                        close: function() {
>
>  allFields.val('').removeClass('ui-state-error');
>                window.location.reload();
>                        }
>                });
>
>        });
>
>    function editUser(userid, first, last, email)
>    {
>        // here's where we preopopulate the form depending on what
> user was selected
>        $('#firstname').attr('value', first);
>        $('#lastname').attr('value', last);
>        $('#email').attr('value', email);
>        $('#userid').attr('value', userid);
>        $('#userUpdate').dialog('open');
>    }
>
>
> The issue is that the dialog works fine for the items on the default
> tab ('Teachers') for (clicking Edit will bring up the entry in the
> Dialog, and clicking update will message back 'update complete' and
> the dialog buttons will update fine. However, when choosing edit on
> any item in the 2nd tab ('Students') the dialog will come up fine,
> however clicking on 'Update' will not update the Dialog window with
> 'update complete' and change the buttons. I'm pretty sure it's
> executing the code because I've put alerts in the js and everything
> seems to be executing but the dialog isn't updating.
>
> Any thoughts?
>
> Neil
>

Reply via email to