2017-04-16 5 views
0

私は、クリックするとそのHTMLをテキストエリアに挿入したい要素のセットを持っています。一連のクリックした要素をテキストエリアに追加するにはどうすればよいですか?

私はこれを行う場合、私はちょうどチェックし1の要素の多くを得る:

jQuery('body').on('change', '.masonry .item :checkbox', function() { 
    var urls = []; 
    jQuery('.masonry .item :checkbox:checked').each(function() { 
     urls.push(jQuery(this).next('label').find('img').attr('src')); 
    }); 
    var str = ''; 
    urls.forEach(function (url) { 
     str += '<div class="item"><img onerror="this.parentNode.removeChild(this);" src="' + url + '"></div>'; 
    }); 
    jQuery('#usp-custom-4').val(function(_, val){ 
     return val + str; 
    }); 
}); 

私はこれを行う場合、私はテキストエリアにまったくテキストを取得しない:

jQuery('#usp-custom-4').append(str); 

そして、私がこれをうまく動作させる場合:

jQuery('#usp-custom-4').val(str); 

しかし、最後の問題は2つの異なるセット最初のセットをクリックするといいですが、2番目のセットをクリックすると、最初のセットを選択して挿入した値が削除され、2番目のセットだけが挿入されます。どちらのセットでも、選択したhtmlを同じテキストエリアに挿入する必要があります<textarea id="usp-custom-4"></textarea>

サンプルjsFiddle playgroundはここに追加されますが、チェックを外すと削除されません。

UPDATE

グローバル配列var urls = [];

機能1:あなたは、あなたのコード内で小さなミスを犯した

function (data) { 
    jQuery.each(data.items, function(i, item) { 
     var uniq = uniqueId('thing_'); 
     var $items = jQuery('<div class="item">'.concat(
     '<input type="checkbox" name="', uniq, '" value="valuable" id="', uniq, '" />', 
     '<label for="', uniq, '">', 
      '<img class="img-responsive" src="' + item.link + '">', 
     '</label>', 
    '</div>')); 
     jQuery(".masonry").append($items); 
     jQuery('body').on('change', '.masonry .item :checkbox', function() { 
     jQuery('.masonry .item :checkbox:checked').each(function() { 
      urls.push(jQuery(this).next('label').find('img').attr('src')); 
     }); 
     var str = ''; 
     urls.forEach(function (url) { 
      str += '<div class="item"><img onerror="this.parentNode.removeChild(this);" src="' + url + '"></div>'; 
     }); 
     jQuery('#usp-custom-4').val(str); 
     }); 
    }); 
    }); 

機能2

function (data) { 
     jQuery.each(data.items, function(i, item) { 
      var uniq = uniqueId('thing_'); 
      var $items = jQuery('<div class="item">'.concat(
      '<input type="checkbox" name="', uniq, '" value="valuable" id="', uniq, '" />', 
      '<label for="', uniq, '">', 
       '<img class="img-responsive" src="' + item.link + '">', 
      '</label>', 
     '</div>')); 
      jQuery(".masonryB").append($items); 
      jQuery('body').on('change', '.masonryB :checkbox', function() { 
      jQuery('.masonryB :checkbox:checked').each(function() { 
       urls.push(jQuery(this).next('label').find('img').attr('src')); 
      }); 
      console.log(urls) 
      var str = ''; 
      urls.forEach(function (url) { 
       str += '<div class="item"><img onerror="this.parentNode.removeChild(this);" src="' + url + '"></div>'; 
      }); 
      jQuery('#usp-custom-4').val(str); 
      }); 
     }); 
+0

になった場合は必要になること、あなただけしたい場合アイテムがテキストエリアから削除するために追加した検証可能な例 –

+0

を提供し、そこに残りの部分を残してくださいそのチェックボックスで何が追加されたのかをチェックし、その文字列をテキストエリアから削除する必要があるため、多くの作業が必要です。 – alfredo

+0

@alfredo私はすでに何がクリックされている配列にプッシュしています。私は2つの異なる配列にプッシュして追加する必要があるので、私は2つの配列に参加する必要があると信じています –

答えて

0

jQuery('#usp-custom-4').val(function(_, val){ 
    return val + str; 
}); 

jQuery('#usp-custom-4').val(function(_, val){ 
    return str; 
}); 

https://jsfiddle.net/digelim/w9vbtw8q/

+0

'jQuery( '#usp-custom-4')だけを実行していたのと同じポイントになります。 '第2の関数を起動してイメージをクリックすると、textareaは以前の関数が追加したイメージを削除します。 –

+0

これをすべての関数' str = ''の外側でグローバルに設定する必要があるのだろうかと疑問に思うのですが、 –

+0

試してみたところで、画像を1つだけ追加するのではなく、画像をクリックすると多くのものが追加されます。 –

関連する問題