我有一个下拉列表定义如下的页面
$memb=$this->api->db->dsql()->table('vscrum_member m')
->field('m.id')
->field('m.name')
->where('m.team_id',$p->api->auth->get('team_id'))
->order('m.xlastname, m.xfirstname')
->do_getAssoc();
$f=$p->add('Form');
$l1=$f->addField('dropdown','member')->setValueList($memb);
当用户更改它时,我需要重新加载页面并传递下拉列表的当前值(GET 或 POST 都可以)。
在 ATK4 中,我可以用这个导致页面重定向
$l1->js('change')->univ()->redirect($this->api->getDestinationURL(null));
理论上,您可以添加一个值数组作为第二个参数,成为 GET 变量
$l1->js('change')->univ()
->redirect($this->api->getDestinationURL(null, array('member'=>123);
但由于我不知道在客户端选择的值,这无济于事。在 javascript 中,您可以通过使用选择选择框的当前值
this.options[this.selectedIndex].value
在 jquery 中你可以使用
$('#name').val();
但到目前为止,我最接近的是使用
$l1->js('change')->univ()->redirect($this->api->getDestinationURL(null,
array('member'=>$l1->js(true)->val())));
这会将重定向到
http://localhost/test1/scrumwall?
member=%24%28%27%23test1_scrumwall_form_member%27%29.val%28%29
那么任何想法正确的语法是什么,以便它评估所选选项的 id,而不是将下拉列表的名称作为参数值?
$l1->js('change') 位在下拉列表中添加了一个 onchange="" - 也许有一些方法可以直接在引号之间插入 javascript 但看不到任何示例。
我试过这样
$l1->js('change')->univ()->js(null,
"window.location='http://localhost/test1/scrumwall?member='+this.options[this.selectedIndex].value");
但它没有把它放在onchange的引号之间,而是将它添加为绑定到下拉列表的jquery函数(参见下面的浏览器视图源中的结果),但这也不起作用。
$('#test1_scrumwall_form_member').bind('change',function(ev){
ev.preventDefault();ev.stopPropagation();
$('#test1_scrumwall_form_member').univ().js(null,'window.location=\x27
http://localhost/test1/scrumwall?member=\x27+this.options[this.selectedIndex].value')
});
所以我不知道如何用 ATK4 做到这一点。任何帮助表示赞赏。
谢谢