Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:Can';我们不能将jQuery(this)分配给一个变量吗?_Javascript_Jquery - Fatal编程技术网

Javascript jQuery:Can';我们不能将jQuery(this)分配给一个变量吗?

Javascript jQuery:Can';我们不能将jQuery(this)分配给一个变量吗?,javascript,jquery,Javascript,Jquery,我只是在练习jQuery。如果这是个奇怪的问题,请原谅 问题:我们可以将jQuery(this)分配给变量吗 说明: 我可以将各种jQuery选择器分配给变量,然后可以使用这些变量调用不同的jQuery函数 比如说 $filterSwitch = jQuery('.filter-switch'); $filterSwitch.click(function(e) { alert("Filter Button Clicked"); // This works with

我只是在练习jQuery。如果这是个奇怪的问题,请原谅

问题:我们可以将
jQuery(this)
分配给变量吗

说明:

我可以将各种jQuery选择器分配给变量,然后可以使用这些变量调用不同的jQuery函数

比如说

    $filterSwitch = jQuery('.filter-switch');

    $filterSwitch.click(function(e) {
       alert("Filter Button Clicked"); // This works without any problem
    });
    $filterSwitch = jQuery('.filter-switch');
    $current = jQuery(this);

    $filterSwitch.click(function(e) {
       $current.toggleClass("filter-on"); // This does not work
       jQuery(this).toggleClass("filter-on"); // This works
    });
另一方面,在将其分配给变量之后,我似乎无法使用
jQuery(this)

比如说

    $filterSwitch = jQuery('.filter-switch');

    $filterSwitch.click(function(e) {
       alert("Filter Button Clicked"); // This works without any problem
    });
    $filterSwitch = jQuery('.filter-switch');
    $current = jQuery(this);

    $filterSwitch.click(function(e) {
       $current.toggleClass("filter-on"); // This does not work
       jQuery(this).toggleClass("filter-on"); // This works
    });

这是不允许的,或者是否有任何特定的方法将
jQuery(this)
分配给变量

是一个DOM元素,jQuery将回调函数的范围设置为回调的主题元素

此处
this
将是此处单击的元素,只能使用处理程序回调中的
this
关键字进行访问

$filterSwitch = jQuery('.filter-switch');
$current = jQuery(this);

$filterSwitch.click(function(e) {
  $current.toggleClass("filter-on"); // This does not work because when $current was assigned, `this` did not refer to the correct element.

  $newCurrent = jQuery(this); // Now `this` is the clicked element.
  $newCurrent.toggleClass("filter-on"); // This works
});

这是因为您需要记住,
指的是您当前所在的上下文

所以第一个

$current = jQuery(this); 
可能是指身体或其他东西,而不是第二个
this

第二个
在click方法的上下文中,该上下文设置为
。过滤器开关

希望这有意义:)

您可以这样做:

$filterSwitch = jQuery('.filter-switch');

$filterSwitch.click(function(e) {
   $filterSwitch.toggleClass("filter-on"); // This works for all elements with that class
   jQuery(this).toggleClass("filter-on"); // This works only for the one you're clicking atm
});

请注意,第一行现在指的是所有具有filter switch类的元素,而第二行仅指您目前正在处理的元素。

您是否希望
$current
包含单击的元素?应该有帮助将$(this)分配给
单击处理程序之外的变量
this
,该处理程序不引用
单击的
元素。它指的是全局上下文。您可以说:
$filterSwitch=jQuery('.filterSwitch')
将jQuery元素放入变量中。然后你说
$current=jQuery(这个)。但是这还不是什么。您必须说
$current=$filterSwitch。但由于这只是传递另一个变量中的值,所以您可以说
$filterSwitch.click(函数(e){$filterSwitch.toggleClass(“filter on”);})Yeahhhhh。这是最好的解释。现在我明白了问题所在。谢谢,先生:-)