0

私はvolunteer_editというビューを持っています。volunteer_edit内で、jQueryを使用してプロジェクトIDの配列をループし、プロジェクトIDごとにタブを作成します。jQuery tabsプラグインは、順序付けされていないリストアイテム内の各リンクを、リンクが指すhtmlで満たされたタブに変換します。

/** Print the li elements that gets turned into tabs by jQuery **/
<ul>
<?php foreach ($projects as $project): ?>

    <li><a href="project_edit/<?php echo $project['id'] ?>"><?php echo $project['name'] ?></a></li>

<?php endforeach ?>
</ul>

私の場合、各リンクは、project_editというビューにパラメーターとして異なるプロジェクトIDを送信します。project_edit内には、次のフォームがあります。

<!-- Form contained within a typical tab -->
<form id="proj_form">
    <label for="title">Title:</label><input type="text" value="Comm. Ag. Ext." name="title" />
    <label for="project">Project:</label><input type="text" value="Agriculture" name="project"/>
    ...
    <br/><button type="button" name="proj_submit">Update Project</button><br/>
</form> 

フォームが送信さ$this->input->post()れると、フォームの入力要素のコンテンツを取得してデータベースに提供できるようにするために使用します。

/** I handle the form's submit and send the form contents to an 'update' method of the project_edit class **/
$(function(){
    $('button[name="proj_submit"]').click(function(){
        vol_params = $('#proj_form').serialize();
        $.post('project_edit/update', vol_params, function(data) {
            console.log(data);
        });
    });
});


/** Inside the project_edit model **/
$data = array(
    'title' => $this->input->post( 'title', true ),
    'project' => $this->input->post( 'project', true ),
    ...
    );

$this->db->update( 'projects', $data, array( 'id' => $this->input->post( 'proj_id', true ) ) );

これはすべて、最初のタブで完全に機能します。ただし、後続のすべてのタブで、フォームが送信されると、最初のタブのコンテンツがに提供され$this->input->post()ます。これは、タブを切り替えるときに、非アクティブなタブがページに残り、「display」プロパティが「none」に設定されているためだと思います。したがって、の最初のパラメーターと一致するname属性を持つ最初の要素のみが$this->input->post()post配列になります(name = "title"の最初の入力、name = "project"の最初の入力など)。

この制限をどのように克服できますか?アクティブな(現在表示されている)タブのみを送信することをお勧めします。

4

2 に答える 2

0

ページごとに名前を持つIDは1つだけで、POSTリクエストはnameIDではなくフレームaで送信されます。

HTMLがどのようにまとめられているかを確認できるように、コードを投稿することをお勧めします。

于 2012-02-03T13:58:56.740 に答える
0

代わりに、フォームのIDをクラスに変更してください。.submit()次に、ボタンのクリックイベントをキャプチャする代わりに、を使用してフォーム送信を処理します。コールバック関数内で、$(this)送信されているフォームを参照するために使用し、を呼び出すことによってデフォルトのアクションを防ぐことを忘れないでくださいpreventDefault()

$(function(){
    $('form.proj_form').submit(function(e){
        e.preventDefault();
        vol_params = $(this).serialize();
        $.post('project_edit/update', vol_params, function(data) {
            console.log(data);
        });
    });
});
于 2012-02-04T01:30:28.663 に答える