0

我想要下拉列表药物,重定向到所选特定药物的视图。所以说他们点击药物“对乙酰氨基酚”我希望它把他们送到那个药物的视图。我可以在不添加提交按钮的情况下做到这一点吗?

我的下拉代码:

<?php
echo $form->input('Drug.generic', array('type' => 'select', 'label' => 'Quick Select:',
  'empty' => 'Select', 'options' => $alldrugs)
);
?>

索引控制器动作(查看下拉是打开的)

  function index() {
    $this->set('drugs', $this->Drug->find('all'));
    $this->set('alldrugs', $this->Drug->find('list', array('fields' => array('id','generic'), 'order' => 'Drug.generic', 'recursive' => -1,)));
  }
4

3 回答 3

2

您可以将根 url 存储在 js 变量中,default.ctp如下所示:

将此代码放在 default.ctp<head></head>部分中。

<script>
  var _ROOT = "<?php echo $this->Html->url('/', true); ?>";
</script>

并在<head>标签中在</head>结束之前附加这一行:

<?php echo $this->Html->script(array('jquery', 'drug_list')); ?>

然后使用以下_ROOT类似:

window.location = _ROOT + 'drugs/view/' + val;

放置 jquery 库并YOURNAME.js在文件夹中创建一个文件app/webroot/js,并将以下代码与YOURNAME.js文件一起放置。

YOURNAME如你所愿

$(function() {
   $('#ID_OF_YOUR_SELECT_BOX').change(function() {   // replace the ID_OF_YOUR_SELECT_BOX with the id to your select box given by Cake
       var val = $(this).val();  // val is the drug id
       window.location = _ROOT + 'drugs/view/' + val;
    });
});
于 2012-04-30T18:23:32.230 回答
0

我会将选择放在没有提交按钮的表单中,然后onclick在选择中添加一个(您实际上并不需要一个完整的框架):

<?php
echo $form->input('Drug.generic', array('type' => 'select', 'label' => 'Quick Select:',
  'empty' => 'Select', 'options' => $alldrugs, 'onchange'=>'this.form.submit();')
);
?>

当然,在控制器中,您必须检查this->data并根据选择将用户重定向到正确的页面,或者如果您不想重定向用户,只需更改 find() 上的条件。

希望这可以帮助,

于 2012-04-30T18:14:40.170 回答
0

通过混合使用 jQuery 和 PHP,您可以直接重定向到您想要的操作:

<?php
echo $form->input('Drug.generic', array('type' => 'select', 'label' => 'Quick Select:',
  'empty' => 'Select', 'options' => $alldrugs, 'id' => 'drug_select')
);
?>

$(document).ready(function(){

    $("#drug_select").change(function(){
        var drug_id = $(this).val();
        if(drug_id.length > 0)
        {
            window.location = "<?php echo Router::url(array('controller' => 'drugs', 'action' => 'view'), true) ?>/" + drug_id;
        }
    });

});
于 2012-04-30T18:28:28.800 回答