0

配列から値を取得するコードを作成したいのですが、このコード["1", "2", "3"]を7つ使用して新しい行を作成します。配列の値は90近くになるため、1〜7が最初の行に、8〜14が別の行に表示されます。このコードを作成しましたが、ウェブサイトがフリーズしてブラウザがクラッシュするだけなので、どこが間違っているのか教えてください。

var newVals = new Array("1", "2", "3"..."81");
var target = ".content table";
var activeTar = target + " .active";
for(var i = 0; i < newVals.length; i++){
    for (var y = 0; y < 7; y++){
        if(y == 0){
            jQuery(target).append('<tr class="active"></tr>');
        }
        var valId = newVals[i];
        var valImg = "http://sub.domain.com/" + valId + "/picture";
        var valCode = '<td class="cell"><a class="toggleAdd" tabindex="0" data-icon="'+valId+'"><img src="'+valImg+'"></a></td>';
        jQuery(activeTar).append(valCode);
        if(y == 6){
            jQuery(activeTar).removeClass("active");
            y = -1;
        }
    }
}
jQuery(".toggleAdd").live("click", function(){
    jQuery("input", jQuery(this).closest('form')).val(jQuery("input", jQuery(this).closest('form')).val() + jQuery(this).attr("data-icon"));
});
4

2 に答える 2

1

私が正しく理解していれば、次の行を削除するだけで済みます。

y = -1;

次のforループを変更します。

for(var i = 0; i < newVals.length; i++){

これのために:

for(var i = 0; i < newVals.length; i = i + 7){

次の行を置き換えます。

var valId = newVals[i];

これのために:

var valId = newVals[i + y];
于 2012-09-23T17:24:09.217 に答える
1

"active"DOMselectoを実行して適切な行に挿入するためのクラスがあるようです。

必要なし。行を変数に保存して追加し、7項目ごとに新しい行を作成して保存するだけです。

var newVals = new Array("1", "2", "3", /*...,*/ "81"),
    target = jQuery(".content table"),
    activeRow;

$.each(newVals, function(i, valId) {
    if(i % 7 === 0)
        activeRow = jQuery('<tr></tr>').appendTo(target);

    activeRow.append('<td class="cell"><a class="toggleAdd" tabindex="0" data-icon="'+valId+'"><img src="http://sub.domain.com/' + valId + '/picture"></a></td>');
});

これは、モジュラス演算子を使用して、新しい行を作成する時期かどうかを判断します。

ハンドラーに関しては、変数を使用すると少しクリーンアップできます。また、jQuery 1.7以降を使用している場合は、onの代わりにを使用する必要がありliveます。

jQuery(document).on("click", ".toggleAdd", function(){
    var input = jQuery(this).closest('form').find("input"),
        v = input.val() + jQuery(this).attr("data-icon");

    input.val(v);
});

すべての要素documentを保持する最も深いコンテナを表すセレクターに置き換える必要があります。.toggleAdd

于 2012-09-23T17:35:13.787 に答える