将文本框值和复选框值附加到字符串

时间:2013-03-20 17:10:39

标签: javascript jquery

我无法确定如何在文本字段中添加值(排除空文本框和相应的复选框)以及所有已检查和未检查的值按顺序附加到字符串:name | T | F_name | F | F < / p>

我有这个代码,我一直试图弄清楚如何将它变成一个单独的字符串。提交后,我会将此字符串发送给我的控制器。

<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 个答案:

答案 0 :(得分: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 Fiddle demo

上述内容确实依赖于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 Fiddle demo

参考文献:

答案 1 :(得分: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/

答案 2 :(得分: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('_'));

答案 3 :(得分: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输入元素。