混淆简单的变量声明jQuery“$variable”vs javascript“var”

前端之家收集整理的这篇文章主要介绍了混淆简单的变量声明jQuery“$variable”vs javascript“var”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个简单的ghost文本实现:

HTML代码

<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”。

可能的事实是,通过将“var”改为全局变量删除“var”

对于“这个”,是的,这是JavaScript的一个棘手的方面,可能会导致你的问题。内部“焦点”和“模糊”功能中的“this”的值可能与外部“this”的值不同。我不知道事件处理程序中的“this”是什么,但它不会是同一个对象。所以你可能想要做的是将“this”赋给外部函数中的变量,然后在内部引用该变量来代替“this”。

原文链接:https://www.f2er.com/jquery/181813.html

猜你在找的jQuery相关文章