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

虽然你可以使用这个肮脏的正则表达式:

$("#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 回答
1

jsFiddle:http: //jsfiddle.net/4Mwsu/15/

$(".imageRemove").click( function()
{
    $(this).hide();

    var values = $("#post_images").val().split(",");
    var newValue = "";

    for ( var i = 0 ; i < values.length ; i++ )
    {
        if ( $(this).attr("id") != values[i] )
        {
            newValue = newValue + values[i] + ",";
        }
    }

    $("#post_images").val( newValue );
});​
于 2012-07-19T18:23:27.410 回答
1

您可以考虑改用 jQuery 的data方法,它可以让您存储真正的数组。如果您需要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 回答
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 回答