1

好的,这是一个基本的标记

<ul>
    <li>User 1</li>
    <li>User 2</li>
    <li>User 3</li>
</ul>
<form>
    <input type="text" value="" name="username[]" id="users"/>
</form>

我想要做的是获取 ul 的长度,我知道该怎么做,所以如果数字是 3,它将创建 3<input type="text" name="username[]" value="" id="users"/>使用该元素中 Li 中的用户名,所以基本上在用户按下按钮之后表格应该看起来像这样

<form>
    <input type="text" value="User 1" name="username[]" id="users"/>
    <input type="text" value="User 2" name="username[]" id="users"/>
    <input type="text" value="User 3" name="username[]" id="users"/>
</form>

所以我现在的编码是

$('#form_submit').click(function() {
    var id="#"+ $('.dataSrc').attr('data-id');
    if(id =="#titles_sendto" && $('#ListedAuthSend li').length >= 1) {
        var ListAuthUsers = [];
        var listedAuthUsers = $('#ListedAuthSend li');

        for(var i =0;i<listedAuthUsers.length;i++){
            var name = $(listedAuthUsers[i]).text();
            ListAuthUsers.push(name);
        }
    }
});

http://jsbin.com/ibebax/1/edit 直观的看代码

像这样的东西会起作用吗?

for(var j=0;j<ListAuthUsers.length;j++){
 var tab = $(ListAuthUsers[i]);
 var html = '<ul>';
 html += '<li>'+tab+'</li>';
 alert(html);
 }
4

5 回答 5

3

在你的 for 循环中放置这样的东西:

$('<input>').attr({
    type: 'text',
    name: 'username[]',
    id: 'users'
}).appendTo('form');
于 2013-05-30T03:18:54.797 回答
2

像这样在循环中创建输入的东西:

var input = $("<input type='text'>");
input.attr("id", "users" + i);
input.attr("name", "username[" + i + "]");
input.val($(listedAuthors[i]).text());
input.appendTo(formsubmit);

在行动:http: //jsfiddle.net/tbLmQ/1/

于 2013-05-30T03:18:32.460 回答
2

试试这个方法。

与您的示例不同,ID 必须是唯一的,因此这将处理唯一 ID 的创建。

var inputTemplate = $('<input type="text"  name="username[]" />'); //Create a template for the input

$('#form_submit').click(function () {
    var inputs = $('#ListedAuthSend li').map(function (i, ob) {//Use $.map to convert the li's to input.
        return inputTemplate.clone()
               .val(this.innerHTML)
               .attr('id', 'users' + i);
    }).get();

    $('form').html(inputs); //paste it in form.
});

小提琴

于 2013-05-30T03:19:19.200 回答
0

使用 jQuery.map:

$('#form_submit').click(function() {
   var $list_auth_users = $('#ListedAuthSend li'),
       input = $('<input type="text" name="username[]"></input>')
   ;

   $('form').html(
     $list_auth_users.map(function(index, user){
       var name = $(user).text();
       return input.clone()
         .attr('id', 'user_' + index)
         .attr('value', name);
     }).get()
   );
});

链接在这里:http: //jsbin.com/ibebax/3/edit


或 for 循环

$('#form_submit').click(function() {
   var $users = $('#ListedAuthSend li'),
       input = $('<input type="text" name="username[]"></input>'),
       form_list = [],
       name
   ;


   for (var index = 0; index < $users.length; index++) {
      name = $($users[index]).text();
      $(input.clone().attr('id', 'user_' + index).attr('value', name))
          .appendTo('form'); 
   }
});

链接在这里:http: //jsbin.com/ibebax/10/edit


为了将来参考,您不能有多个具有相同id的元素,但您可以使用同一个

错误的:

<div id="f"></div>
<div id="f"></div>

正确的:

<div id="a" class="f"></div>
<div id="b" class="f"></div>
于 2013-05-30T03:35:10.480 回答
0

你可能会喜欢这个

$('#form_submit').click(function() {
    $('form').empty();
    $('#ListedAuthSend li').each(function(k, v){
        var txt = $('<input>',{'name':'username[]','id':'users','value':$(v).text() });
        $('form').append(txt);
    });
});

演示。

更新:使用for循环

$('#form_submit').click(function() {
    $('form').empty();
    var lis = $('#ListedAuthSend li');
    for(var i=0; i<lis.length;i++){
        var txt = $('<input>',{'name':'username[]','id':'users','value':$(lis[i]).text() });
        $('form').append(txt);
    }
});

演示。

于 2013-05-30T03:38:43.640 回答