0

配列に文字列を入力しようとしています。追加される要素は、クリックされた <\li> の HTML です。おそらく正しく入力されています。

私の問題は、ユーザーがチェックしたリンクをもう一度クリックしたときに、このアイテムを配列から削除したいことです

コードサンプルは次のとおりです。

$(document).ready(function(){
    var chosen = [];
    var chosenCounter = 0;

            find("ul").find("li").click(function(){
        var checkBox = $(this).find("img").first();
        var checkBoxSrc = checkBox.attr("src");
        if(checkBoxSrc == "images/unchecked.png"){
            checkBoxSrc = "images/checked.png";
            checkBox.attr("src",checkBoxSrc);
            checkBox = "";
            checkBoxSrc = "";
            var temp = this.outerHTML;
            chosen[chosenCounter] = temp;
            chosenCounter ++;
        }
        if(checkBoxSrc == "images/checked.png"){
            checkBoxSrc = "images/unchecked.png";
            checkBox.attr("src",checkBoxSrc);
            checkBox = "";
            checkBoxSrc = "";



    for (var j =0; j<=chosen.length; j++){
            var tempRemove = this.outerHTML;
            chosen.splice( chosen.indexOf( tempRemove ), 1 );
            tempRemove = '';
        }
    }
});

});

インターネットで見つけたすべての機能と方法を試してみましたが、結果がうまくいきません。修正と説明に非常に感謝しています。よろしくお願いします。

4

1 に答える 1

0

私はコードを書き直して、よりうまく機能するようにしました。いくつかの問題がありましたが、これが私がテストした修正バージョンです。

  • 元のコードにはifステートメントがあり、次に別のifステートメントがありました。if が必要で、次にelse ifが必要でした。
  • 子要素を見つけるときに、find 演算子と first() の代わりに $('img', this) を使用していることに注意してください。
  • HTML の代わりに ID を使用する
  • デバッグ用に、そこに console.log ステートメントがあります。これを削除して、IE で動作するようにします。
  • 要素を配列に追加するには、プッシュを使用します
  • アイテムを削除するためにスプライスをループする必要はありません。splice を 1 回呼び出すだけです。

    $(document).ready(function () {

    var chosenIDs = [];
    
    $("ul li").click(function () {
        var checkBox = $('img', this);
        var checkBoxSrc = checkBox.attr("src");
        var id = $(this).attr('data-id');
        console.log(id + ' ' + chosenIDs.length + ' ' + checkBoxSrc);
    
        if (checkBoxSrc == "images/unchecked.png") {
            checkBoxSrc = "images/checked.png";
            checkBox.attr("src", checkBoxSrc);
    
            chosenIDs.push(id);
        }
        else if (checkBoxSrc == "images/checked.png") {
            checkBoxSrc = "images/unchecked.png";
            checkBox.attr("src", checkBoxSrc);
    
            chosenIDs.splice(chosenIDs.indexOf(id), 1);
        }
    });
    

    });

于 2013-02-16T23:54:54.250 に答える