1

過去にjavascriptを扱ったことがありますが、再学習しようとしています。そのため、JQuery などのライブラリを使用せずに JavaScript ソリューションを考え出したいと思います。

いくつかのスレッドに出くわしましたが、それらは近いものでしたが、私の状況に完全に一致するものではありませんでした.

PHP によって動的に生成されたフォームがあり、データベースから情報を取得し、すべてのフォーム入力をエコーし​​ます。これらはすべて、データベース内のエントリを表すチェックボックスです。通常、name="id[value]" を使用します。ここで、value はループ中の現在のエントリの ID です。

したがって、次のようなものがあります。

<input type="checkbox" name="del[1]"/>
<input type="checkbox" name="del[2]"/>
<input type="checkbox" name="del[3]"/>

これをフォーム送信時に投稿するときは、$_POST['del'] の値を取得して、1 日と呼びます。ただし、AJAX関数を使用してPHPページに送信しようとしているため、ページを変更したり更新したりせずに関数を実行できます。

私の質問は、どのチェックボックスがチェックされているかを理解できるように、すべてのチェックボックス(チェックされている)を取得してPHPページに送信するにはどうすればよいですか。私の理解では、これには何らかの変換が必要になります。私が最初に行ったのは、チェックされた各ボックスをループして、そのインデックスを取得し (またはすべての ID を指定して ID を取得し)、それを文字列に入れて、PHP 側を爆発させることでした。

何かご意見は?ありがとう、シャーフ。

4

3 に答える 3

1
var i, child, str='', arr = Array(),
    form = document.getElementById('form')

for(i=0; i<form.childNodes.length; i++) {
    // grab the element
    var child = form.childNodes[i];
    // make sure it is an input and a checkbox
    if(child.tagName!='INPUT' || child.getAttribute('type')!='checkbox') continue
    // if the checkbox is checked, add the name and value to a url string
    if(child.checked)
        arr.push(child.getAttribute('name')+'='+encodeURIComponent(child.value))
    }
}

// make the URL string
str = arr.join('&')

// now you can use this as a url: 
SomeAjaxUrl + str

次に、PHP で次のようにします。

<?php
    $checked_options = $_REQUEST['del'];
    print_r($checked_options);
?>
于 2013-07-11T20:46:13.937 に答える
0

あなたが言ったようにjqueryを使用してループすることもできます

http://api.jquery.com/attribute-starts-with-selector/

しかし、簡単にするために、バックボーンフォームに似たものを見ていきます https://github.com/powmedia/backbone-forms

モデルを管理し、ajax で簡単に送信できます。

彼らの github には、いくつかの例とともに、より多くの情報があります。これにより、php側で簡単に処理できる配列にcheckboesが配置されます

編集:純粋なJavaScript

var pairs = [];
var form = document.getelementbyid("form");
for ( var i = 0; i < form.elements.length; i++ ) {
   var e = form.elements[i];
   pairs.push(encodeURIComponent(e.name) + "=" + encodeURIComponent(e.value));
}
var output= pairs.join("&");

あなたはそれをかなり簡単に変更できるはずです

于 2013-07-11T20:30:14.043 に答える