代码之家  ›  专栏  ›  技术社区  ›  Elorfin

如何在表单中使用javascript?

  •  1
  • Elorfin  · 技术社区  · 14 年前

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

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

    编辑:

    @班诺特:

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

    我的函数renderjavascript:

    public function renderJavascript() {
      $(function() {
        $('.form').focus(function(){this.blur()});
    });
    

    我已经重写了方法render,如您所示,但是没有错误,但是它什么也不做。

    我认为这是一个小错误,但我从symfony开始,我不理解所有的形式。

    3 回复  |  直到 14 年前
        1
  •  1
  •   marcosbeirigo    14 年前

    可以将HTML属性传递给表单上的呈现方法:

    <?php echo $form["field_name"]->render(array("onfocus" => "alert('focused!');")) ?>
    

    您还可以在选项数组中设置“class”属性,并使用jquery将javascript添加到字段中。

        2
  •  1
  •   Benoit    14 年前

    您应该扩展您的表单类(它应该已经从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标记(如果显示为 echo $form )

    当您重写条令表单以实现与表单HTML紧密相关的javascript功能(内联验证、Ajax集成、动态控件等)时,只需执行如下操作:

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

    同样的模式也适用于我们的小部件,因此,如果某些javascript代码是特定于小部件的,则不必在使用它的每个表单类上重复。

    希望这对你有帮助!

        3
  •  0
  •   lsouza    14 年前

    正确的方法是创建一个单独的.js文件,并将其直接包含在视图中,因此它仍然遵循MVC模式。

    jquery可以简单地获取表单字段,因为表单框架为每个字段提供了一个唯一的ID,jquery可以在.js文件上使用它来设置.focus或任何您想要的内容。

    保持应用程序的干净和易于维护的每一层:)