0

特定の投稿用にアップロードされた画像のすべてのIDを保存する非表示のフィールドがあります。

非表示フィールドのHTMLは次のようになります。

<input type="hidden" id="post_images" name="post_images" value="1,2,3,4,5" />

投稿から画像を削除するときは、その非表示フィールドからそのimage_idを削除する必要があります。したがって、投稿からimage_id 4を削除すると、非表示フィールドを更新して次のようにする必要があります。value="1,2,3,5"

より良い方法があれば、投稿のimage_idの保存方法を別の形式に変更することもできます。

4

5 に答える 5

1

data代わりに、真の配列を格納できるjQuery のメソッドを使用することを検討してください。要素にデータを渡す必要がある場合は、ハンドラーvalueなどで都合のよいときに前後に変換できます。.on('submit', ...)

次のコードは少し面倒ですが、アイデアは伝わると思います。

$pi = $('#post_images');

$pi.data('values', $pi.val().split(',') );
// now .data('values') is a true JS array
console.log($pi.data('values').indexOf("3")); // 2

$pi.data('values').splice(2,1); // removes the third element
console.log($pi.data('values')); // ["1","2","4","5"]

$pi.val( $pi.data('values').join(',') );
console.log($pi.val()); // "1,2,4,5"​​​​​​​​

http://jsfiddle.net/mblase75/vx3XL/2/

于 2012-07-19T19:03:51.773 に答える
1

この汚い正規表現を使用できますが:

$("#post_images").val(function(i, v) {
    return v.replace( new RegExp('(?=(?:^|,))(,?)' + id + '(?=(?:,|$)),?'), '$1' );
});

これがフィドルです:http://jsfiddle.net/43hhs/


より健全な方法は、配列スプライシングを使用することです。

$("#post_images").val(function(i, v) {
    var values = v.split(','),
        i = $.inArray(id.toString(), values);

    if ( i != -1 ) {
        values.splice(i, 1);
        return values.join(',');
    }
    else {
        return v;
    }
});

これがフィドルです:http://jsfiddle.net/khHPq/

于 2012-07-19T18:20:17.120 に答える
0

それを使用すると、私にとって最も簡単な方法は、値の開始と終了を「、」にすることです。

$("#post_images").val($("#post_images").val().replace("," + idtoremove + ",", ",")
于 2012-07-19T18:17:30.553 に答える
0
var theVals = $(':input').val().split(','); //split the values into an array
var myVal = '4'; //this should be the ID of the element you want to remove
if($.inArray(myVal, theVals)){ //is the item in the array
  index = theVals.indexOf(myVal); //if it is, then get the index position
  theVals.splice(index, 1); //starting at the index of the element in the array, remove 1 element
  $(':input').val(theVals); //update the input with the new array of IDs
}
console.log($(':input').val()); //general purpose to visualize this output

動作中の jsFiddle

于 2012-07-19T18:26:32.940 に答える