【问题标题】:How to disable a form element in symfony?如何在 symfony 中禁用表单元素?
【发布时间】:2009-11-25 10:51:58
【问题描述】:

我正在使用表单中的 Select 元素

'country' =>new sfWidgetFormChoice(array('choices' => CountryPeer::getAllCountry())),

'city' =>new sfWidgetFormChoice(array('choices' => CityPeer::getAllCity())),

我希望在第一次加载页面时禁用该城市元素。并在选择国家时启用城市元素。(它将通过 AJAX 调用加载)

【问题讨论】:

    标签: php forms symfony1


    【解决方案1】:

    你可以这样禁用

    $this->widgetSchema['country']->setAttribute('disabled', '禁用');

    【讨论】:

    • 是的!这有效,当表单加载时,选择选项在第一次被禁用。谢谢梅托伊克斯!
    • 正如迈克已经提到的。当您想稍后将字段用于 POST/PUT 时,这不是正确的方法。那么它应该是只读的而不是禁用的
    【解决方案2】:

    $this->widgetSchema['field']->setAttribute('readonly', 'readonly');

    【讨论】:

    • 感谢您的回答,我会试试这个并让您知道 ->setAttribute('disabled', 'disabled');为我工作。
    • 这是正确的方法。如果您设置为禁用并提交表单,并且表单未通过验证,则任何设置为禁用的小部件都不会重新加载。设置为只读对我来说很有效。
    • 我同意这是正确的方法。将该属性设置为禁用意味着如果另一个字段验证失败,则不会重新填充禁用表单字段的值。只读ftw。
    • 禁用对我不起作用(禁用值未保存)。只读它完美地工作。感谢您的提示。大卫
    【解决方案3】:

    如果您已经通过 AJAX 加载了第二个列表的数据,为什么不通过 Javascript 禁用和启用第二个列表?

    可以在模板中硬编码(使用纯 HTML)或通过 Javascript(在文档加载后)完成禁用。

    对于启用,使用 AJAX 调用的回调方法(在成功事件上)。

    可能会知道,您实际上是如何进行 AJAX 调用的(jquery?)。

    【讨论】:

      【解决方案4】:

      嗯,最干净的方法是学习“如何编写自己的小部件”并实际编写它。你可以看看sfWidgetFormDate作为一个粗略的例子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-09
        • 2012-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多