如何在 zend dojo 表单中添加 javascript 函数?
Posted
技术标签:
【中文标题】如何在 zend dojo 表单中添加 javascript 函数?【英文标题】:How to add javascript function in a zend dojo form? 【发布时间】:2012-08-22 09:19:25 【问题描述】:我正在与 Zend_dojo_form 战斗。
这是(部分)代码:
class Application_Form_RegistrationForm extends Zend_Dojo_Form
private $_user;
private $_admin;
private $_teamadmin;
private $_newuser;
private $_redirect;
public function __construct($admin = false, $user = null, $redirect = '')
//blablabla
parent::__construct();
public function init()
Zend_Dojo::enableForm($this);
$this->setMethod('post');
$this->setAttribs(array(
'id' => 'formRegistration',
'name' => 'formRegistration',
));
//some decorators
if ($this->_admin)
$this->addElement(
//blabla + inline javascript
'onChange' => "if(this == ".E_UserRole::OPERATOR.") dojo.query(\".perms\").style( display:\"block\" ); else dojo.query(\".perms\").style( display:\"none\" ); "
)
);
if (Application_Manager_Login::hasRole(E_UserRole::ADMIN))
//add some display:none elements
$permission_decorators = array(
"DijitElement",
"Errors",
array(array("data" => "htmlTag"), array("tag" => "td", "class" => "perms", "style"=> "display:none", )),
array("Label", array("tag" => "td", "class" => "perms", "style"=> "display:none", 'escape' => false, 'requiredSuffix' => ' <span class="red">*</span>')),
array(array("row" => "HtmlTag"), array("tag" => "tr"))
);
//hidden element
$this->addElement(
'CheckBox',
'permission_content',
array(
'decorators' => $permission_decorators,
'label' => 'Gestione contenuti',
'checkedValue' => true,
'uncheckedValue' => false,
'checked' => $this->_user->permission_content,
)
);
//submit button and other stuff
如您所见,我已经放置了一些内联 javascript 来在 user_role 更改时显示/隐藏一些选项。
现在情况有点复杂。我可以继续编写内联 javascript,但我想在开头声明一个 js 函数,然后从 onchange 事件中调用它。
由于这个表单被多个控制器调用,我不会每次手动添加这个函数
new RegistrationForm();
被调用。
【问题讨论】:
你不能在一个外部的 JS 文件中不显眼地做到这一点吗? @TimFountain 我找到了解决方案。外部化 js 不是我想要的,因为我不在视图中。我要写解决方案。 【参考方案1】:好的,我想出了这个解决方案..
function addJavascript()
echo "<script>
function toggle( e )
alert(e);
if(e == ".E_UserRole::USER." || e == ".E_UserRole::ADMIN.")
dojo.query(\".perms\").style( display:\"none\" );
else
dojo.query(\".perms\").style( display:\"block\" );
</script>
";
我在类中声明了这个函数,我只是在开头调用它:
$this->addJavascript();
然后在 onChange 中我调用了我需要的切换函数(函数会变得更复杂,我需要这个变通方法使其可读):
$this->addElement(
//blabla
'onChange' => "toggle(this)",
)
);
希望这对其他人有帮助:)
【讨论】:
以上是关于如何在 zend dojo 表单中添加 javascript 函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过按 Enter 使用 Dojo 和 XHR 发送 Zend 表单
在 Zend Framework 中按需启用对表单的 Dojo 支持