0

我无法弄清楚如何将文本字段中的值(不包括空文本框和相应的复选框)以及所有选中和未选中的值按顺序附加到字符串中:name|T|F_name|F|F

我有这段代码,我一直在想办法把它变成一个字符串。在提交时,我会将此字符串发送到我的控制器。

<input type="text" value="jim">
<input type="checkbox" checked="checked">
<input type="checkbox">
<input id="button_1" type="button" value="delete" ><br>
<input type="text" >
<input type="checkbox">
<input type="checkbox">
<input id="button_2" type="button" value="delete"><br>
<input type="text" value="deb">
<input type="checkbox" checked="checked">
<input type="checkbox" checked="checked">
<input id="button_3" type="button" value="delete"><br>
<input type="submit">


$(':input[type="text"]').each(function() {
    if($(this).val() != "") { 
        nameString = $(this).val();

});

$(':checked').each(function() {

});

更新

jsfiddle

4

4 回答 4

2

我建议:

var results = [], delimiter = '|', n, c;
$('input[type="text"]').each(function(){
    var that = $(this);
    n = this.value;
    if (n !== ''){
        c = that.nextUntil('input[type="button"]').map(function(){
            return this.checked == true;
        }).get().join(delimiter);
        results.push(n,c);
    }
});

console.log(results.join(delimiter));

JS 小提琴演示

以上确实在某种程度上依赖于 HTML 的结构(特别是radio按钮之前的元素。

如果您需要true/falseT/ F,那么请改用:

var results = [], delimiter = '|', n, c;
$('input[type="text"]').each(function(){
    var that = $(this);
    n = this.value;
    if (n !== ''){
        c = that.nextUntil('input[type="button"]').map(function(){
            return (this.checked == true).toString().toUpperCase().slice(0,1);
        }).get().join(delimiter);
        results.push(n,c);
    }
});

console.log(results.join(delimiter));

JS 小提琴演示

参考:

于 2013-03-20T18:54:20.263 回答
1

你快到了,但如果我正确理解你的代码,你必须做一些小的改变......

namestring = "";
$(':input[type="text"]').each(function() {
     if($(this).val() != "") { 
         namestring += $(this).val();
         $(this).find("input[type='checkbox']").each(function() {
             if($(this).is(":checked"))
                 checked = T;
             else
                 checked = F;
             namestring += checked;
         }
         namestring += "_";
     }
}
//<Send namestring places>

此代码应该可以满足您的需求,但我尚未对其进行测试。

编辑:http: //jsfiddle.net/PuQ4r/

于 2013-03-20T17:17:59.467 回答
1

我使用了 2 个 for 循环,因为我相信您希望它每行都有结果。检查http://jsfiddle.net/s7JZF/7/

注意:如果文本框为空,我添加了排除行的条件。

var results = [],
    delimiter = '|';

$('table tr').each(function () {
    var line = [];
    $(this).find('input').each(function () {
        if (this.type == 'text') {
            //exclue blank textbox
            if (this.value == '') return false;

            line.push(this.value);
        } else if (this.type == 'checkbox') {
            line.push(this.checked?'T':'F');
        }
    });

    if (line.length) {
        results.push(line.join(delimiter));
    }
});

alert(results.join('_'));
于 2013-03-26T14:14:54.470 回答
0

如果您为每个输入设置相同的名称,则值将作为字符串数组发送。

所以你的服务器端控制器(你没有说是哪种技术)应该马上选择它们。

默认情况下不会发送没有选中值的复选框。

你可以“预览”这个做一个 GET 而不是 POST 表单,所以如果你有:

<input name="form1" value="yes" type="text" />
<input name="form1" type="checkbox" value="sure" checked />
<input name="form1" type="checkbox" value="noway" />

GET 表格将为您提供:

someAction?form1=yes&form1=sure

这又将是您服务器上的字符串数组。

我知道这不是一个直接的答案,而是正确使用 HTML 输入元素可能对您的情况有所帮助。

于 2013-04-01T17:31:44.547 回答