【问题标题】:SilverStripe CreditCardField bad html and submission errorSilverStripe CreditCardField 坏 html 和提交错误
【发布时间】:2017-01-12 06:21:14
【问题描述】:

我有一个没有它也能正常工作的表单,但是当我添加时

CreditCardField::create('CreditCard','Credit Card')->setAttribute('placeholder', '0000')

它显示具有相同名称、id 和其他属性的信用卡字段。当我去提交它时,验证会抛出一个错误,因为它需要一个数组,但只得到一个最后 4 位数字的字符串。

我是否正确创建了这个字段?我假设一旦我解决了显示问题,它就会解决验证问题。

【问题讨论】:

    标签: php forms silverstripe credit-card


    【解决方案1】:

    我对这种字段类型不是很熟悉,但是你可以从it's template 看到它并不期望能够设置占位符:

    <span id="{$Name}_Holder" class="creditCardField">
        <input $AttributesHTML('id', 'name', 'value', 'tabindex') name="{$Name}[0]" value="{$ValueOne}" $TabIndexHTML(0)/>
        -
        <input $AttributesHTML('id', 'name', 'value', 'tabindex') name="{$Name}[1]" value="{$ValueTwo}" $TabIndexHTML(1)/>
        -
        <input $AttributesHTML('id', 'name', 'value', 'tabindex') name="{$Name}[2]" value="{$ValueThree}" $TabIndexHTML(2)/>
        -
        <input $AttributesHTML('id', 'name', 'value', 'tabindex') name="{$Name}[3]" value="{$ValueFour}" $TabIndexHTML(3)/>
    </span>
    

    您可以设置的属性是ID、名称、值和tabindex。出于某种安全原因,可能会故意省略占位符,或者它可能只是缺少的功能。

    您最好的选择可能是改用some javascript

    $('#MyCreditCard_Holder').find('input').attr('placeholder', '0000');
    

    【讨论】:

    • $AttributesHTML('id', 'name', 'value', 'tabindex') 引起了问题。这些属性旨在将它们从输出中排除,但是我可以在原始源中看到它不是,而第二个名称是。第一个覆盖导致我的问题的第二个。我在框架上提出了一个问题。
    【解决方案2】:

    所以我在logged a ticket 的模板中有一个错误。目前的解决方法是您必须拥有自己的 CreditCardForm.ss 模板,该模板使用 $getAttributesHTML 而不是 $AttributesHTML

    【讨论】:

      猜你喜欢
      • 2016-06-24
      • 2014-04-25
      • 1970-01-01
      • 2021-09-17
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多