0

I have an input, that is meant to be focused on when loaded but it does not stay focused. You can see it will focus when loaded but quickly reverts back to its original 'unfocused' state. The JQuery code I am using is :

$(document).ready(function() {
$("#searchinput").addClass("lightIn").val("Enter a car..").focus();
$("#searchinput").on("keyup",function (event) {
    event.preventDefault();
    var qdata=$("#searchinput").val();
    $("#results").load("search.php", {query: qdata}, function(response, status, xhr){
        if (status == "error") {
            alertify.alert("There has been an error, please refresh and try again!");
        }
    });
    return false;
}).on("keydown", function (event) {
    if ($(this).hasClass("lightIn"))
    {
        $(this).removeClass("lightIn").val("");
    }
}).on("blur",function () {
    $("#find").removeClass("select");
    if ($(this).val()=="")
    {
        $(this).addClass("lightIn").val("Enter a car..");
    };
});
$("#searchgo").on("click",function (event) {
    event.preventDefault();
    var qdata=$("#searchinput").val();
    $("#results").load("search.php", {query: qdata}, function(response, status, xhr){
        if (status == "error") {
            alertify.alert("There has been an error, please refresh and try again!");
        }
    });
return false;
});

});

The site - http://joshblease.co.uk/JQuery/find.php

I am using Chrome to test this in so far

Blease
  • 1,380
  • 4
  • 38
  • 64

1 Answers1

0

Alright, might as well make an answer.

Your input HTML:

<input id="searchinput" class="transparent" placeholder="Enter a car..." autofocus />

And your new more efficient jQuery:

var $searchinput = $('#searchinput');

function returnResults(qdata,e){
    e.preventDefault();
    $('#results').load('search.php', {query: qdata}, function(response, status, xhr){
        if (status == "error") {
            alertify.alert("There has been an error, please refresh and try again!");
        }
    });
}    

$searchinput.on({
    keyup:function(e) {
        returnResults($(this).val(),e);
    },
    keydown:function() {
        if ($(this).hasClass("lightIn")) {
            $(this).removeClass("lightIn").val("");
        }
    },
    blur:function() {
        $("#find").removeClass("select");
    }
});

$("#searchgo").on("click",function(e) {
    returnResults($searchinput.val(),e);
});

This will work brilliantly for IE9+ and all real browsers. Save the placeholder JS solutions for IE8-.

PlantTheIdea
  • 16,061
  • 5
  • 35
  • 40