Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

confusion over simple variable declaration jQuery "$variable" vs javascript "var"

I have this simple ghost text implementation:

HTML code:

<div id="searchPanel">      <form method="get" id="searchBox" action="somePage.php">      <input class="ghText" type="text" name="query" value="search here"/>      </form> </div> 

jQuery code:

$(document).ready(function(){         $txtField = "#searchPanel form input.ghText";         var value = $($txtField).val();         $($txtField).focus(function(){             if($(this).val() == value)                 $(this).val("").removeClass("ghText");         });         $($txtField).blur(function(){             if($(this).val()==""){                 $(this).val(value).addClass("ghText");             }         }); }); 

The example above is not going to work. When the user focuses the cursor on the search bar, the class "ghText" wont be removed for some reason.

However now if I change the "var value" (variable initialization) and "value" with "$value" as in:

$value = $($txtField).val();  $(this).val($value).removeClass("ghText"); $(this).val($value).addClass("ghText"); 

everything works perfectly.

I can just go to sleep and not worried too much about it..but I am very curious why something like that can happen?

is it because of the "this" not referreing to the right object, or is it because i tried storing jQuery object in non-jQuery variable or is it about something else..can somebody point out to me what was wrong? I have always thought that "var x" is the same as "$x"..?

like image 659
Benny Tjia Avatar asked Jun 09 '11 05:06

Benny Tjia


People also ask

What is $variable in jQuery?

It has no special meaning. jQuery sets the global $ variable to an object with a number of special behaviors, so variables beginning with $ are often reserved for variables or values related to jQuery. This is not enforced at any level, though. You're free to use $ in variable names wherever and however you like.

What are the 3 different keywords used in JavaScript to declare variables?

Always declare JavaScript variables with var , let , or const . The var keyword is used in all JavaScript code from 1995 to 2015. The let and const keywords were added to JavaScript in 2015.

Can variable start with in JavaScript?

Variable names are pretty flexible as long as you follow a few rules: Start them with a letter, underscore _, or dollar sign $. After the first letter, you can use numbers, as well as letters, underscores, or dollar signs. Don't use any of JavaScript's reserved keywords.

What is let keyword in JavaScript?

let allows you to declare variables that are limited to the scope of a block statement, or expression on which it is used, unlike the var keyword, which declares a variable globally, or locally to an entire function regardless of block scope.


2 Answers

You seem to be confused about JavaScript variables. There is no such thing as "jQuery variables" and "non-jQuery variables". Some specific cases:

  • A variable declared with var is different to a variable without. "var x" is a local variable, so it will not share a value with other functions which also have a variable called "x". This is almost always a good thing, so you should almost always declare variables with "var".
  • The $ in jQuery is sort of special. It isn't that special; it's just that jQuery has declared a variable called "$" which does some fancy operations.
  • There is nothing special about variables that begin with "$". In other words, "$x" is just a variable name. It is a different variable to "x", and it isn't a "jQuery variable". It's just a JavaScript variable called "$x". (This is different from PHP, where the $ is actually a special variable syntax.)

So you can just call it "value" instead of "$value".

Possibly the fact that you removed the "var" changed things by making it into a global variable.

As for "this", yes, that is a tricky aspect of JavaScript, and might be causing your problem. The value of "this" inside the inner 'focus' and 'blur' functions is likely to be different from the value of "this" outside. I'm not sure exactly what "this" refers to in an event handler, but it will not be the same object. So what you probably want to do is assign "this" to a variable in the outer function, and then refer to that variable on the inside in place of "this".

like image 173
mgiuca Avatar answered Oct 04 '22 19:10

mgiuca


When storing a jQuery selection in a variable, it's common practice to add a $ before the variable name like this:

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

It's not necessary to include the dollar sign — var banner = $('#banner') would work just as well. However, the dollar sign reminds you that the variable holds a jQuery selection and not just any value like a number or a string.

like image 22
alice Avatar answered Oct 04 '22 21:10

alice