Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.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 为什么此代码没有针对正确的选择器_Javascript_Jquery - Fatal编程技术网

Javascript 为什么此代码没有针对正确的选择器

Javascript 为什么此代码没有针对正确的选择器,javascript,jquery,Javascript,Jquery,此函数用于更改被单击对象的背景颜色 function colorMe(){ $(this).css('background-color', 'red'); } 我这样称呼它 $('.colorme').click(colorMe); $('.colorme').click(function(){ alert('something happens first, then colorMe is called'); colorMe(); //I call colorM

此函数用于更改被单击对象的背景颜色

function colorMe(){
   $(this).css('background-color', 'red');
}
我这样称呼它

$('.colorme').click(colorMe);
$('.colorme').click(function(){
  alert('something happens first, then colorMe is called');
  colorMe();         //I call colorMe here..
  $(this).colorMe(); //I also tried this, but it's not working
});
它改变了这个div的背景

<div class="colorme">Color Me</div>

但这并没有影响到这个部门。我认为它失去了影响这个部门的线索。我需要传递它吗?如何传递?

您应该使用
.addClass()
方法

function colorMe(element){
   element.addClass('my-red-class');
}

$('.colorme').click(function(){      
  colorMe(this);         
});
在css文件中有一个名为“我的红色类”(使用更好的名称!)

您还可以轻松删除css:

function unColorMe(element){
   element.removeClass('my-red-class');
}
像这里一样对jQuery对象调用函数

$(this).colorMe()
你必须构建一个插件(我编辑它来添加一个类)

那你就能做到了

$(".a_class").colorMe();
$(".a_class").unColorMe();
使用call()


你有没有试着写这行:$(this.css('background-color','red');在click函数中,不是独立的函数Good answer、Robin,而是解释插件。我还支持JK的观点,即使用类比内联样式更好。+1但是注意,
每个
的调用是不必要的,因为
$.fn.css
本身就包含一个。我更改了插件以添加类,删除了不必要的循环并添加了unColorMe。您的作用域是错误的:
单击
回调将传递一个DOM元素,而不是jQuery对象;DOM元素没有
addClass()
方法。
$(this).colorMe()
// css
.red {
    background: red;
}

// js
(function($) {
    $.fn.extend({
        colorMe: function() {
            this.addClass("red");
        },
        unColorMe: function() {
            this.removeClass("red");
        }
    });
})(jQuery);
$(".a_class").colorMe();
$(".a_class").unColorMe();
function colorMe(){
    $(this).css('color', 'red');
}
$('.colorme').click(function(){
    alert('something happens first, then colorMe is called');
    colorMe.call(this);
});