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 フィドルのデモ

radio上記は、HTML の構造 (特にボタンの前にある要素) に多少依存しています。

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

行ごとに結果が必要だと思うので、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 に答える
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 に答える
0

各入力に同じ名前を設定すると、値は文字列配列として送信されます。

したがって、サーバー側のコントローラー(どのテクノロジーが何であるかは言及していません)はすぐにそれらを選択する必要があります。

チェックされた値のないチェックボックスは、デフォルトでは送信されません。

POST フォームの代わりに GET を実行してこれを「プレビュー」することができます。

<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 に答える