6

I am building a list of checkbox items in jQuery based on an array returned from a handler.

The containing element is the .listContainer element below and then each dynamic element I want to add to this takes the form of the .listContainerItem element. Each item will have checkbox value and label based on the array item creating it.

<div class="listContainer">
    <div class="listContainerItem">
        <input type="checkbox" value="1" />
        <div class="listContainerItemLabel">Checkbox 1</div>
    </div>
</div>

At the point of the function that has the array passed to it, what is the most efficient way of creating this? I have been trying to accomplish it as below, but quickly running into major performance issues.

function AddItemToListContainer(item) {
    var currentItems = $j("#listContainerAvailable .listContainerItem");
    if ($j.grep(currentItems, function (e) { return $j(e).find(":checkbox:first").val() == item.Id; }).length === 0) {
        labelDiv = $j("<div />").addClass("listContainerItemLabel").html(item.Text);
        itemToAdd = $j("<div />").addClass("listContainerItem").append("<input type=\"checkbox\" value=\"" + item.Id + "\" />").append(labelDiv);
        currentItems.append(itemToAdd);
    }
}

I've looked at .map function, but not sure quite how to implement it. Can someone point me in the right direction?

4

4 に答える 4

1

これらの要素を 1 つずつ表示しますか? または、ページの読み込み時に配列から動的に作成されますか?

最後に:

html

    <div class="listContainer">
       <div class="listContainerItem"></div>
     </div>  

とjquery

var array = ['1', '2', '3', '4', '5'];

 $.each(array, function (index, value) {
    $(".listContainerItem").append('<input type="checkbox" value="' + value + '" /> <div         class="listContainerItemLabel">Checkbox ' + value + '</div>');
 });

http://jsfiddle.net/jeremythuff/HEKjk/

そして、いくつかの .click イベントは最初の効果をもたらします

于 2013-03-05T04:33:27.627 に答える
1

私は次のようなことから始めます:

var $container = $j('#listContainerAvailable');
var checkboxes = {};

function AddItemToListContainer(item) {
    if (checkboxes[item.Id]) return false;

    checkboxes[item.Id] = true;

    var $item = $j('<div />', {
        'class': 'listContainerItem',
    }).appendTo($container);

    $j('<input />', {
        'type': 'checkbox',
        'value': item.Id
    }).appendTo($item);

    $j('<div />',  {
        'class': 'listContainerItemLabel',
        'text': item.Text
    }).appendTo($item);
}

ページの作成時にこれらの要素が存在しない限り、DOM を検索する代わりに、これらの要素をハッシュ テーブルに追加できます。mustache.jsのような JS テンプレート エンジンも役立つと思います。

于 2013-03-04T12:25:43.637 に答える
1

コードのボタンを押すと、入力フィールドが入力されているかどうかがチェックされ、空の場合はポップアップで警告されます。空でない場合は、入力フィールドの値を取得し、チェックボックスを作成してチェックボックスの横にある入力の値。

フォームの HTML

<form name="formName" id="listContainerItem">
    <input id="newinput" type="text" value=""/><button id="button">Add new rule</button> <br />
    <input type="checkbox" value="1" /><span class="listcontainerItemLabel" />Checkbox 1 <br />
</form>

Javascript

$(#button).click(function() {
function addLine(e) {
        e.preventDefault();
        var x = document.getElementById('newinput').value;
        if(x == '') {
            alert('not filled in')
        } else {
            $('#listContainer').append('<input type="checkbox" value="1" /><span class="listcontainerItemLabel" />'+x+  '<br />')
        }
    }

});

rememberdocument.getElementById('newinput')は次のように書くこともできます。$('#newinput')

あなたがしなければならないのは、必要に応じて追加されるものを少し変更することだけです。

于 2013-03-04T14:26:44.577 に答える
0

動的に作成するには、さまざまな方法を使用できます。

$("#elementid").after("<input type='checkbox'></input><span></span>;

$("#elementid").before("<input type='checkbox'></input><span></span>;

$("#elementid").append("<input type='checkbox'></input><span></span>;

$("#elementid").prepend("<input type='checkbox'></input><span></span>;

同様insertAfter()に、insertBefore()appendTo()prependTo().....を使用できます

于 2014-07-29T11:26:54.247 に答える