具有多个实例的Jquery插件

时间:2014-06-03 08:44:21

标签: jquery plugins multiple-instances

您好我尝试了多种解决方案,我可以找到论坛但是,我想我需要先了解最基本的内容:)

我创建了一个(非常)简化的我要创建的插件示例,它在不同的DOM对象上使用鼠标事件,但现在点击所有div更改为' lime'。我怎样才能解决这个问题?

<!doctype html>
<html>
<head>
</head>
<script src="jquery.js"></script>
<script>
(function ($, color, otherColor){
var otherColor= 'yellow';

$.fn.tester = function(color, otherColor){
    otherColor= otherColor;
    this.css('background-color', color);
    this.on('click', changeColor);
}

function changeColor(e){
    $(this).css('background-color', otherColor);
}

}(jQuery));
</script>
<script>
 $(document).ready(function(){
    $('#tester').tester('green', 'purple');
    $('#tester2').tester('black', 'gray');
    $('#tester3').tester('orange', 'lime');
});
</script>
<body>
    <div id="tester" class="row tester" style="width:100%; height: 100px; background-color: #0ff;"></div>
    <div id="tester2" class="row tester" style="width:100%; height: 100px; background-color: #0ff;"></div>
    <div id="tester3" class="row tester" style="width:100%; height: 100px; background-color: #0ff;"></div>
</body>
</html>

<!doctype html> <html> <head> </head> <script src="jquery.js"></script> <script> (function ($, color, otherColor){ var otherColor= 'yellow'; $.fn.tester = function(color, otherColor){ otherColor= otherColor; this.css('background-color', color); this.on('click', changeColor); } function changeColor(e){ $(this).css('background-color', otherColor); } }(jQuery)); </script> <script> $(document).ready(function(){ $('#tester').tester('green', 'purple'); $('#tester2').tester('black', 'gray'); $('#tester3').tester('orange', 'lime'); }); </script> <body> <div id="tester" class="row tester" style="width:100%; height: 100px; background-color: #0ff;"></div> <div id="tester2" class="row tester" style="width:100%; height: 100px; background-color: #0ff;"></div> <div id="tester3" class="row tester" style="width:100%; height: 100px; background-color: #0ff;"></div> </body> </html>

2 个答案:

答案 0 :(得分:0)

您需要将颜色保存在闭包中。如果使用全局变量,则它始终包含已设置的最后一种颜色。

this.on("click", function() {
    changeColor(this, otherColor);
});

...

function changeColor(element, color) {
    element.css('background-color', color);
}

答案 1 :(得分:0)

您的代码中存在一些问题。试试这个:

<html>
<head>
</head>
<script src="jquery.js"></script>
<script>
(function ($, color, otherColor){

    $.fn.tester = function(color, otherColor){
        this.css('background-color', color);
        this.on('click', function(){
            $(this).css('background-color', otherColor);
        });
    }

}(jQuery));
</script>
<script>
 $(document).ready(function(){
    $('#tester').tester('green', 'purple');
    $('#tester2').tester('black', 'gray');
    $('#tester3').tester('orange', 'lime');
});
</script>
<body>
    <div id="tester" class="row tester" style="width:100%; height: 100px; background-color: #0ff;"></div>
    <div id="tester2" class="row tester" style="width:100%; height: 100px; background-color: #0ff;"></div>
    <div id="tester3" class="row tester" style="width:100%; height: 100px; background-color: #0ff;"></div>
</body>
</html>