5

基本的に、私はコンテナーを配列にプッシュしています。一度プッシュされた後は、同じコンテナーを再度プッシュすることを許可したくありません。

これが私のJSfiddleです:http://jsfiddle.net/9Dmcg/3/

Javascript:

$(document).ready(function(){

var favorites = [];
var counter = 0;

    $('.containers').on('click', function(){

        favorites.push($(this).clone())

        $('.favorite').append(favorites);
    });


});

私はそれを回避する方法を見つける必要があります。

4

7 に答える 7

4

そのクリックイベントにそれ以上のものがない限り.one()、代わりにメソッドを使用し.onてこの機能を取得できます。

$(document).ready(function(){

    var favorites = [];
    var counter = 0;

    $('.containers').one('click', function(){

        favorites.push($(this).clone())

        $('.favorite').append(favorites);
    });    

});

http://jsfiddle.net/9Dmcg/4/

たとえそれ以上のものがあっても、あなたはまだ使うことができます.one():

$(document).ready(function(){

    var favorites = [];
    var counter = 0;

    $('.containers').one('click', function(){

        favorites.push($(this).clone())

        $('.favorite').append(favorites);

        $(this).on("click",function(){
             alert("Favorite Added!");
        }).triggerHandler("click");

    });    

});

http://jsfiddle.net/9Dmcg/5/

于 2013-03-12T22:03:37.003 に答える
1

私が言う要素IDをチェックしてみてください。このようなもの:

$(document).ready(function(){

var favorites = [];
var counter = 0;

    $('.containers').bind('click', function(){
        var isAdded = false;
        for (var f = 0; f < favorites.length; f++) {
            console.log(favorites[f].id + "|" + this.id);
             if (favorites[f].id === this.id)
                 isAdded = true;
        }

        if (!isAdded)
            favorites.push($(this).clone()[0])


         console.log(favorites);
        $('.favorite').append(favorites);
    });


});

そして、ここに実例があります-> http://jsfiddle.net/9Dmcg/7/

mz

于 2013-03-12T22:13:31.643 に答える
0

要素を複製する代わりに、要素自体をプッシュするだけです。

favorites.push($(this))

追加の利点は、アイテムが既に追加されているという手がかりをユーザーに与えることです。

ライブデモ: http://jsfiddle.net/9Dmcg/6/

于 2013-03-12T22:14:42.160 に答える
0

Array.indexOfを探しているようです。配列の値のインデックスを返します。見つからない場合は -1 を返します。

これは新しい配列メソッドであるため、古いブラウザーで動作させるにはポリフィルが必要です。

$(document).ready(function(){

    var favorites = [];
    var counter = 0;

    $('.containers').on('click', function(){
        var clone = $(this).clone(); // caching element

        if (favorites.indexOf(clone) !== -1) {
            favorites.push(clone);
        }

        $('.favorite').append(favorites);
    });
});
于 2013-03-12T22:14:56.453 に答える
0

プッシュされたアイテムにクラスを追加し、基本的なチェックを行います: 代わりに:

favorites.push($(this).clone())

できるよ:

if( !$(this).hasClass("pushed") ) {
    favorites.push( $(this).addClass("pushed").clone() );
}
于 2013-03-12T22:13:15.320 に答える
0

要素が既に存在するかどうかを確認できます。

$(document).ready(function(){

    var favorites = [];

    $('.containers').on('click', function(){
        var found = false;
        for(var i = 0; i < favorites.length; i++)
        {
            if (favorites[i] == $(this)) found = true;
        }
        if (!found) favorites.push($(this).clone())

        $('.favorite').append(favorites);
    });


});
于 2013-03-12T22:07:34.730 に答える