1

imgタグを生成するスクリプトがあり、同じimgが2回作成されていないことを確認したいと思います。これは私が作成しようとしたスクリプトです:

var included = 0;
var src = "";

jQuery.fn.checkCard = function() {
    if ($("#L_S_Inner").find($('img').attr(src))){
        included = 0;
    } else {
        included = 1;
    }
}

ただし、機能しません。ここで何が間違っているのかわからない...

img作成スクリプトに含まれている変数'を確認できるように、このようにフレーム化されています。

編集

img作成スクリプトを追加しました:

$('#Results a').live('dblclick', function() {
    src = $(this).attr('href');
    getC = $(this).attr('class');
    checkCard();

    if (!(checkCard)) {
            $(this).parent().append($('<img />', {'src': src, 'class': 'DCT ' + getC + ''}));
    }
});
4

1 に答える 1

5

ここにいくつかの問題があります。まず、あなたの説明にもかかわらず、グローバル変数の必要性はわかりません。これは醜く危険な方法です。そのようにしない正当な理由がない限り、関数の戻り値である必要があります。

次に、@ sosbornが言うように、関数には入力パラメーターがありません。これはsrc別のグローバル(まだ表示されていません)であるか、コードが機能しません。

次に、内部findにはjQueryオブジェクトではなくセレクターがあり、内部attrには値ではなく属性名(つまり、文字列"src")が必要です(おそらく)srcのようなものが含まれている必要がありますhttp://...

また、なぜそれをjQueryプラグインにするのですか?

問題の文字通りの解決策、私はこのようにします:

var checkCard = function(src) {
    return !!($('#L_S_Inner img[src="' + src + '"]').length);
}

より良い、しかし解決策は、手動で追跡することによって作成した画像を覚えておくことです-はるかに高速です。

var included = [];
// ...
// when you make an image
included[src] = true;
// ...
// when you want to know if it is there
if (included.hasOwnProperty(src)) // ...

更新:作成コードが投稿されたら、2番目のソリューションを書き直します。

var included = [];
$('#Results a').live('dblclick', function() {
    var src = $(this).attr('href');
    var getC = $(this).attr('class');

    if (!included.hasOwnProperty(src)) {
        $(this).parent().append($('<img />', {'src': src, 'class': 'DCT ' + getC + ''}));
        included[src] = true;
    }
});

ちなみに、var私があなたの内部変数に追加したことに注意してください。あなたの変数を宣言してください、それは健康に良いです。

于 2011-06-12T00:18:58.313 に答える