如何在表单中使用JavaScript?
如何将您自己的JavaScript添加到由条令生成的表单中 例如,在哪里可以在symfony生成的输入表单中添加onFocus脚本 编辑: @贝诺特: 我试过你的方法,但不管用 我的函数renderJavascript:如何在表单中使用JavaScript?,javascript,forms,symfony1,Javascript,Forms,Symfony1,如何将您自己的JavaScript添加到由条令生成的表单中 例如,在哪里可以在symfony生成的输入表单中添加onFocus脚本 编辑: @贝诺特: 我试过你的方法,但不管用 我的函数renderJavascript: public function renderJavascript() { $(function() { $('.form').focus(function(){this.blur()}); }); 我已经重写了你给我看的render方法,但是没有错误,但它什么也不
public function renderJavascript() {
$(function() {
$('.form').focus(function(){this.blur()});
});
我已经重写了你给我看的render方法,但是没有错误,但它什么也不做
我认为这是一个小错误,但我从symfony开始,我不理解表单中的所有内容。您可以将html属性传递给表单上的呈现方法:
<?php echo $form["field_name"]->render(array("onfocus" => "alert('focused!');")) ?>
您应该扩展表单类(它应该已经从sfForm派生出来)以覆盖render
方法
从symfony 1.4开始,sfForm类没有renderJavascript方法。我们通常为所有表单和小部件使用一个basse类,该类将定义此方法并覆盖render方法
class abstractOurForm extends sfFormDoctrine
{
public function render($attributes = array())
{
return parent::render($attributes).
'<script type="text/javascript">'.$this->renderJavascript().'</script>';
}
public function renderJavascript()
{
//nothing here
}
}
同样的模式也适用于我们的小部件,因此如果某些javascript代码是小部件特定的,则不必在使用它的每个表单类上重复
希望这对你有帮助 正确的方法是创建一个单独的.js文件,并将其直接包含在视图中,因此它仍然遵循MVC模式
jQuery可以简单地抓取表单字段,因为表单框架为每个字段提供了一个唯一的ID,jQuery可以在.js文件上使用该ID设置.focus或任何您想要的内容
保持应用程序各层的整洁和易于维护:)在我的表单中如何使用myClassForm中定义的renderJavascript?您可以覆盖render方法(如果使用“echo$form或生成的crud”,则很有用),也可以在模板中直接调用renderJavascript(如果您在模板中手动编写HTML代码)
class myWhateverForm extends abstractOurForm
{
public function configure()
{
//your widget & validators config here
}
public function renderJavascript()
{
//here come the JS code
$js = <<<EOT
//example with jquery
$(function() {
$('#myElement').focus(function(){
if (window.console) console.log('you\'ve done it');
});
});
EOT;
return $js;
}
}