Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery排序表和guid存在问题_Jquery_Html_Jquery Ui Sortable - Fatal编程技术网

jquery排序表和guid存在问题

jquery排序表和guid存在问题,jquery,html,jquery-ui-sortable,Jquery,Html,Jquery Ui Sortable,我有 文本1 文本2 文本3 但是$('#测试列表')。可排序('serialize')是否生成如下字符串: 876e45a4-6a27-4f7b-95ca[]=9e2500f11801和79fbfdf7-e9b1-4e96-8e42[]=9e2400d2abb7和4df36ffb-561a-4eaa-9b1c[] 删除id的最后12个字符 知道为什么吗?两件事: 可排序。序列化的ID 您确定可排序的序列化的实现了您所期望的功能吗?根据,它希望每个可排序元素的ID的格式为setname\u

我有

    文本1 文本2 文本3
但是
$('#测试列表')。可排序('serialize')是否生成如下字符串:
876e45a4-6a27-4f7b-95ca[]=9e2500f11801和79fbfdf7-e9b1-4e96-8e42[]=9e2400d2abb7和4df36ffb-561a-4eaa-9b1c[]

删除id的最后12个字符


知道为什么吗?

两件事:

可排序。序列化
的ID 您确定
可排序的
序列化的
实现了您所期望的功能吗?根据,它希望每个可排序元素的ID的格式为
setname\u number
。ID中应该有下划线,但会使用
=
-
;发件人:

默认情况下,它以“setname_number”格式查看每个项目的id,并输出类似“setname[]=number&setname[]=number”的散列。
…其格式必须为:“set_number”,例如,一个id属性为
foo_1
foo_5
foo_2
的三元素列表将序列化为
foo[]=1&foo[]=5&foo[]=2
您可以使用下划线、等号或连字符分隔集合和数字。例如
foo=1
foo-1
foo\u 1
全部序列化为
foo[]=1

(我的重点。)由于没有看到下划线(
),很明显,它正在使用它看到的最后一个连字符(
-

id
用于CSS的格式 另外,与CSS一起使用的
id
值不能以数字开头;发件人:

在CSS中,标识符(包括选择器中的元素名称、类和ID)只能包含字符[a-zA-Z0-9]和ISO 10646字符U+00A1及更高,加上连字符(-)和下划线(33;);它们不能以数字开头,也不能以连字符后跟数字

(这些限制对HTML中的
id
不适用,HTML中不能包含空格,如果给定,则必须至少有一个字符,但CSS的限制性更强。)

由于您在jQuery中使用CSS选择器,因此最好确保
id
属性是有效的CSS。(也许您可以将它们预处理为“G”,后面是带破折号的GUID,转换为
x
,诸如此类,因此ID是
G876e45a4x6a27x4f7bx95cax9e2500f11801
等等。)然后您需要按照上面的说明给它们一个下划线和后缀。

将其更改为
$(“#测试列表”)。可排序('serialize')).replace(/=\[\]/g,“-”)
解决了这个奇怪的问题,但是在jQuery UI代码中使用长ID肯定有些奇怪。我会看得更远

更新

右键
serialize()
例程中
jquery.ui.sortable.js
中有问题的代码是:

<ul id="test-list" class="ui-sortable" >
   <li id="876e45a4-6a27-4f7b-95ca-9e2500f11801">text1</li>
   <li id="4df36ffb-561a-4eaa-9b1c-9e2500f16d6b">text2</li>
   <li id="cc4a57d5-1567-403c-888f-9e2500f1c171">text3</li>
</ul>

这是一种故意的功能,它检测包含破折号(-)、等于或下划线的ID,并将它们视为数组值、左/右分隔数组和键值。也许可以使用条形码,或者修改
serialize()
以供您使用。

我也遇到了同样的问题。我解决这个问题的方法是更改视图的代码,将破折号字符替换为空字符串:


@foreach(模型中的var项目)
{
@项目.标题
}
注意:在我的情况下,我使用div而不是ul/li

我的javascript如下所示:

$(“div#divItems”)。可排序({
光标:“移动”,
更新:功能(事件、用户界面){
var容器=$(此);
var sequence=container.sortable(“serialize”,{key:“sequence”});
$.post(“@Url.Action(“EditSequence”)”),序列,函数(数据){
if(data.success){
container.fadeTo(“正常”,0,函数(){
容器。fadeTo(“正常”,1);
});
}否则{
警报(数据、消息);
}
});
}
});
注意:我将键更改为“Sequence”,fadeTo()组合用于向成功保存序列的用户提供视觉反馈

我的控制器操作方法如下所示:

//POST:/Showcase/EditSequence?序列=
[授权]
[HttpPost]
公共操作结果编辑序列(列表序列)
{
尝试
{
for(int i=0;i
模型绑定器负责将不带破折号的Guid字符串转换为绑定到序列参数的列表。

对于like
876e45a4-6a27-4f7b-95ca-9e2500f11801,您可以添加参数

$(items).each(function() {
    var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
    if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2]));
});

好的观点,虽然我很快就在他的问题上的每个连字符后用字母做了一个测试,但它仍然存在。@Orbling:我只是在编辑你在那里的评论,我认为问题在很大程度上(或更多程度上)与我答案的新的第一部分和第二部分有关。:-)@TJ当我发现什么是什么的时候,你改变了你的答案,说出了我说的话。尽管你非常明智地去看了文档,而我看了代码。对我来说唯一的好处是,如果需要连字符,我知道代码需要修改的地方。;-)您可以在视图中执行item.Id.ToString(“N”),作为.Remove()方法的替代方法。
$(this).sortable('serialize', {expression:(/(.+)[_](.+)/)})