我有这个简单的ghost文本实现:
<div id="searchPanel"> <form method="get" id="searchBox" action="somePage.PHP"> <input class="ghText" type="text" name="query" value="search here"/> </form> </div>
jQuery代码:
$(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"); } }); });
上面的例子不会奏效当用户将光标放在搜索栏上时,由于某种原因,类“ghText”不会被删除。
但是现在如果我更改“var value”(变量初始化)和“value”
“$ value”如下:
$value = $($txtField).val(); $(this).val($value).removeClass("ghText"); $(this).val($value).addClass("ghText");
一切都很好
我可以去睡觉,不用担心太多了,但是我很好奇为什么会发生这样的事情?
是因为“这个”不是引用正确的对象,还是因为我尝试将jQuery对象存储在非jQuery变量中,还是关于别的东西?有人可以指出我有什么问题吗?我一直认为“var x”与“$ x”相同..?
解决方法
你似乎对JavaScript变量感到困惑。没有“jQuery变量”和“非jQuery变量”这样的东西。一些具体情况:
>使用var声明的变量与没有变量的变量不同。 “var x”是一个局部变量,所以它不会与其他函数共享一个值,也有一个名为“x”的变量。这几乎总是一件好事,所以你几乎总是用“var”声明变量。
> $ in jQuery是一种特殊的。这不是特别的只是jQuery已经声明了一个名为“$”的变量,它会做一些奇特的操作。
>以“$”开头的变量没有什么特别的。换句话说,“$ x”只是一个变量名。它是一个与“x”不同的变量,它不是“jQuery变量”。它只是一个名为“$ x”的JavaScript变量。 (这不同于PHP,其中$实际上是一个特殊的变量语法。)
所以你可以把它称为“值”而不是“$ value”。
对于“这个”,是的,这是JavaScript的一个棘手的方面,可能会导致你的问题。内部“焦点”和“模糊”功能中的“this”的值可能与外部“this”的值不同。我不知道事件处理程序中的“this”是什么,但它不会是同一个对象。所以你可能想要做的是将“this”赋给外部函数中的变量,然后在内部引用该变量来代替“this”。