【问题标题】:serialise form with dynamic textboxes使用动态文本框序列化表单
【发布时间】:2016-01-26 21:54:27
【问题描述】:

我创建了一个for 循环,允许我生成文本框供用户输入数据以添加到 mySql 数据库。

var $frm2 = $("<form id=insertform class=form2></form>"); // craete the form
$frm2.append(txt8, txt9); // add 2 clone dropdown boxes to the form

// this loop creates n number of text boxes abnd adds them to the form 
for(var i = 0; i < n-1; i++)  { 
    $('<input /></br>', {
        id: "valueid" + i,
        text: "text",
        name: "user"
    }).appendTo($frm2);
}

问题是当我通过 JSON 将数据序列化到 AJAX 发布时,只有两个下拉框被序列化,文本框似乎没有添加到数据中。

$("#inserthbtn").click(function() {
    var datastring = $($frm2).serialize();
    $("#reports4").append(datastring);
    alert(datastring);
});

如果你能看到我哪里出错了,那就太棒了(我也知道我缺少要发布到 AJAX 的脚本,我无法让它工作,因此作为故障查找过程的一部分将其删除)。

【问题讨论】:

    标签: javascript jquery mysql json ajax


    【解决方案1】:

    输入以[] 结尾的数组样式名称。当它被序列化时,它们将被收集到一个数组中。

    for(var i = 0; i < n-1; i++) 
    {   
            $('<input />', {id: "valueid" + i,text: "text",name: "user[]"}).appendTo($frm2);
            $('<br />').appendTo($frm2);    
    }
    

    另外,当您将多个元素放入第一个参数时,您不能使用$() 的对象参数来指定新元素的属性。

    另一种选择是给他们唯一的名字,name: "user"+i

    【讨论】:

    • 太棒了,非常感谢,我选择了 'name: "user"+i',这对 php 有很大帮助。再次非常感谢
    • 如果你使用 PHP,我会选择user[]。然后$_POST['user'] 将是一个数组,您可以使用foreach 轻松循环。
    • 感谢您的提示,我实际上必须通过在 PDO 中创建准备好的语句来做到这一点,第一次尝试这样做,任何指向文献的指针会有所帮助吗?,你不必这样做如果你没有时间,你会非常乐于助人,再次感谢
    • 看看here 了解如何动态创建准备好的语句。
    【解决方案2】:

    问题在于,尽管您提供了一个对象,该对象具有应用于您动态创建的 input 的属性,但您正在创建两个元素(inputbr),因此 jQuery 不确定哪个元素你想把属性。从选择器中删除 br 元素,它将起作用:

    for(var i = 0; i < n-1; i++)  { 
        $('<input />', {
            id: "valueid" + i,
            text: "text",
            name: "user"
        }).appendTo($frm2);
    }
    

    【讨论】:

    • 这个还是有序列化问题,因为名字重名。
    猜你喜欢
    • 1970-01-01
    • 2011-09-29
    • 2015-03-16
    • 2018-02-07
    • 2019-01-08
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多