选择复选框并将其作为参数发送到操作

时间:2011-11-15 17:48:45

标签: javascript ajax symfony1 checkbox checkboxlist

我正在尝试对项目列表实施大量删除操作,其中每个项目都有一个复选框,并且有一个按钮可以删除所有选定的项目。所有这些都在symfony btw。

我最大的问题是:带有复选框的列表来自AJAX调用,因此我无法在定义列表的模板中定义侦听器。我需要在收到AJAX响应的模板中执行此操作。

我给你一些我的代码:

  • 返回列表的模板包含:

`

foreach($items as $item){
    echo '<input id="'.$item->getItemID().'" type="checkbox" onClick="[I CAN'T REFERENCE HERE A FUNCTION IN THE OTHER TEMPLATE]">';
    echo 'etc ...';
}`
  • 并且收到列表的模板是

`

<div id="itemList">
    [the AJAX list goes here]  
</div>
<input type="button" value="delete all items">`

所以我的问题是:如何实现它,当按下按钮时,调用一个symfony动作,其中包含一组选定的复选框(或等效信息)作为参数。

非常感谢你的时间!

1 个答案:

答案 0 :(得分:1)

要做的第一件事是获取复选框数组并将它们传递给symfony。如果您有以下html

<input id="1" type="checkbox" class="delete">
<input id="2" type="checkbox" class="delete">
<input id="3" type="checkbox" class="delete">
<input id="4" type="checkbox" class="delete">
<input type="submit">

使用以下jquery

$('input[type=submit]').click(function(){
    var elems = new Array();
    $('.delete:checked').each(function(){
        elems.push($(this).attr('id'));
    });

    $.ajax({
        type: 'POST',
        url: 'url',
        data: {elements_to_delete: elems}});
});

见这里:http://jsfiddle.net/HbkvF/

然后你做executeDeleteBatch()之类的事情(未经测试):

public function execute(sfWebRequest $request)
{
  $ids = $request->getParameter('elements_to_delete');
  $count = Doctrine_Query::create()
    ->delete()
    ->from('<YOUR CLASS>')
    ->whereIn('id', $ids)
    ->execute();
  }
}

$count返回已删除的项目数。