如何在表单中使用JavaScript?

如何在表单中使用JavaScript?,javascript,forms,symfony1,Javascript,Forms,Symfony1,如何将您自己的JavaScript添加到由条令生成的表单中 例如,在哪里可以在symfony生成的输入表单中添加onFocus脚本 编辑: @贝诺特: 我试过你的方法,但不管用 我的函数renderJavascript: public function renderJavascript() { $(function() { $('.form').focus(function(){this.blur()}); }); 我已经重写了你给我看的render方法,但是没有错误,但它什么也不

如何将您自己的JavaScript添加到由条令生成的表单中

例如,在哪里可以在symfony生成的输入表单中添加onFocus脚本

编辑:

@贝诺特:

我试过你的方法,但不管用

我的函数renderJavascript:

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;
    }
}