Avatar of flynny
flynnyFlag for United Kingdom of Great Britain and Northern Ireland asked on

jquery textbox not focusing

Hi all,

Im hoping im missing something really simple here :).

I have the following code which is testing validation on textboxes; (please forgive the alerts)

<asp:TextBox ID="FirstNameTextbox" CssClass="half" runat="server" MaxLength="30"></asp:TextBox>

    <script type="text/javascript">
        $('#<%=FirstNameTextbox.ClientID%>').watermark('First name');

        $(document).ready(function () {
            $('#<%=FirstNameTextbox.ClientID%>').focusout(function () {

                if ($('#<%=FirstNameTextbox.ClientID%>').val() == "") {
                    alert('about to focus out');
                    highlightField($('#<%=FirstNameTextbox.ClientID%>'), false);
                    alert('finished!!!!');
                }
                else {
                    highlightField($('#<%=FirstNameTextbox.ClientID%>'), true);
                }

                alert('got here no issues');
            })

            $('#<%=FirstNameTextbox.ClientID%>').focusin(function () {
                if ($("#<%=FirstNameTextbox.ClientID%>").hasClass("error")) {
                    highlightFieldMessage($('#<%=FirstNameTextbox.ClientID%>'), false, "Please enter your first name in full.");
                    alert('here okkkk');
                }
             })
        });

        function highlightField(textfield, valid) {
            //alert('now here');

            if (textfield.parent().is(".textbox-wrapper")) {
               // alert( textfield.parent().html());
                textfield.parent().find(".input-status").remove();
                //alert('removed the status icon');
                //alert(textfield.parent.html());

                textfield.parent().find(".error-popup").remove();
                textfield.parent().find(".valid-popup").remove();
                //alert('removed any popups');
                textfield.unwrap();
                //alert('unwrapped');
            }

            //alert('adding the wrapper');
            textfield.wrap("<div class='textbox-wrapper'></div>");

            if (!valid) {
                textfield.removeClass("valid"); //just in case
                textfield.addClass("error");
                textfield.parent().append("<div class='input-status input-cross'></div>");
            }
            else {
               // alert('setting textbox invalid');
                textfield.removeClass("error"); //just in case
                textfield.addClass("valid");
                textfield.parent().append("<div class='input-status input-tick'></div>");
            }
        }

        function highlightFieldMessage(textfield, valid, message) {
           // alert('highlightField :' + textfield.attr('id') + ":valid:" + valid + ":MESSAGE:" + message );
            highlightField(textfield, valid);
            alert('here we are afgter sub call');

            if (!valid) {
                textfield.parent().append("<div class='error-popup'>" + message + "<div class='error-popup-arrow'></div></div>");
                textfield.parent().find('.error-popup').css('left', textfield.width() + 58);   
            }
            else {
                textfield.parent().append("<div class='valid-popup'>" + message + "<div class='error-popup-arrow'></div></div>");
                textfield.parent().find('.valid-popup').css('left', textfield.width() + 58);
            }
            alert('ok after adding message etc')
            
        }

Open in new window


Now when I first load and enter the field (i can enter text at this point into the field) and move out of focus from it it works correctly and highlights it as an error field.

When I move it back into focus it remains highlighted as error and displays the message. However at this point the field is not in focus?? i.e. i cannot type into it.

Am i knocking it out of focus in the code or doing something wrong here?
JavaScriptjQuery

Avatar of undefined
Last Comment
flynny

8/22/2022 - Mon
leakim971

you should not use alert because your field will lost focus
ASKER
flynny

hi,

just to add it seems to be the sub call which unwraps and the rewraps the textbox

http://stackoverflow.com/questions/4350566/jquery-textfield-loses-focus-on-unwrap

unwrap seems to lose the focus of the textbox. Is there anyway I can stop this?
leakim971

What about :
var f = textfield.is(":focus");
textfield.unwrap();
if(f) textfield.focus();

Open in new window

All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck
ASKER
flynny

ok I've tried this but still the same result and it loses focus;

heres my updated code

function highlightField(textfield, valid) {

            var f = textfield.is(":focus");
            unwrap(textfield);

            textfield.wrap("<div class='textbox-wrapper'></div>");
            if (f) textfield.focus();

            if (!valid) {
                textfield.removeClass("valid"); //just in case
                textfield.addClass("error");
                textfield.parent().append("<div class='input-status input-cross'></div>");
            }
            else {
                textfield.removeClass("error"); //just in case
                textfield.addClass("valid");
                textfield.parent().append("<div class='input-status input-tick'></div>");
            }
        }

function unwrap(textfield) {
            if (textfield.parent().is(".textbox-wrapper")) {
                textfield.parent().find(".input-status").remove();

                textfield.parent().find(".error-popup").remove();
                textfield.parent().find(".valid-popup").remove();
                textfield.unwrap();

            }
        }

Open in new window

ASKER CERTIFIED SOLUTION
leakim971

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
See how we're fighting big data
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
ASKER
flynny

perfect thank you.

any ideas why .focus() was not working out of interest? i assume maybe wrap was still doing something?
leakim971

there's no wizard in the room, to wrap, the element to wrap is removed from the DOM (so loose focus) the wrap element is added to the DOM, the element is added back to the DOM with all its saved attributes (alas not the focus which is not an attribute...)
Get an unlimited membership to EE for less than $4 a week.
Unlimited question asking, solutions, articles and more.
ASKER
flynny

perfect