微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

混淆简单的变量声明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.jb51.cc/jquery/181813.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐