2010-09-26 72 views
2

在过去,我一直使用隐藏字段,在提交按钮onClick事件中,我使用自定义代码将列表内容(li元素的文本)填充到隐藏表单字段中,并将其解析出来,使用自定义代码。在HTML表单提交中发布有序列表的内容的最佳方式是什么?

这总是感觉像是黑客,我想知道是否有更现代的方法。我想找到最通用的方法,但如果工具很重要,我在客户端使用JQuery,而在服务器上使用Ruby/Sinatra。也许把列表变成一个JSON对象,然后在服务器端消耗?

回答

1

如果要为昏迷无法相依一个值

var values = $.map($('ol li'), function(e,i) { 
    return $(e).html(); 
}); 
$('form').append('<input type="hidden" name="field" value="' + 
    values.join(',') + '"/>'); 

或者你可以把它作为一个数组

var inputs = $.map($('ol li'), function(e,i) { 
    return '<input name="field[]" value="' + $(e).html() + '"/>'; 
}); 
$('form').append(inputs.join(" ")); 
+0

谢谢。为了避免用户输入的列表项中有逗号,但使用分隔列表时出现问题,我使用了一个更“不同寻常”的字符。 – 2010-09-27 21:05:52

+0

如果您将使用第二个示例,则不必担心内容中出现连接字符串。您还可以使用'params [:field]'作为Sinatra中的普通Ruby数组来访问这些值。 (字段名的'[]'部分使得大多数Web框架都会自动发生这种情况,包括Sinatra和Rails。) – 2010-09-28 04:09:33

0

目前尚不清楚一个HTML <ol><li>...</li>...</ol>名单究竟哪方面你想传递的,但假设你的意思成员<li>标签的文本contentents,那么你可能会做这样的事情:

$('ol.selector li') 
    .each(function(i) { 
     $("<input name='something-" + i + "'>") 
      .val($(this).html()) 
      .appendTo('form.selector'); 
    } 
}; 
相关问题