0

次のフィールドを作成しようとしています:

<select name="test">
    <option value="1">a</option>
    <option value="2">b</option>
    <option value="3" style="font-weight: bold; color: red;">c *</option>
    <option value="4">d</option>
    <option value="5">e</option>
</select>

これにより、2 色の selectbox が作成されます。

ここに画像の説明を入力

しかし、Symfony2 では、単一のオプションにクラスを適用する方法がわかりません。

私の見解では、私はそうします:

{{
    form_widget(myForm.test, {
        'attr': {
            'class': 'red',
        }
    }) 
}}

または、私のフォームで私が行う場合:

    $builder->add('test', 'choice', array(
            'required' => true,
            'choices' => array('a', 'b', 'c *', 'd', 'e'),
            'attr' => array('class' => 'red'),
    ));

属性は<select>タグに保存され、選択可能な値全体に適用されます。

編集

jQuery を使用して問題を解決しました:

1)私の見解では、次のように述べています。

{{
    form_widget(myForm.test, {
        'attr': {
            'class': 'starred-select',
        }
    }) 
}}

2)私のJavaScriptでは、私は入れました:

    $('.starred-select option').each(function() {
        if ($(this).text().substr(-2) == ' *') {
            $(this).addClass('red');
        }
    });

もちろん、私の価値観は星で終わることはできません。

<option>クラスをSymfony2のタグに適用するにはどうすればよいですか?

4

1 に答える 1

2

ウィジェット選択フィールドのレンダリング方法をオーバーライドする必要があります。

フォームテーマを使用すると、フォームのすべての部分をカスタマイズできます。基本フォームブロックでさえオーバーライドできます。

これを行うための最良の方法は、form_div_layout.html.twigからデフォルトのブロックをコピーすることです (あなたの場合、widget_choice_optionsブロックをオーバーライドする必要があります)

アプリケーションのさまざまなレベルでブロックをカスタマイズすることもできます。ドキュメントを詳しく見てください。完全に説明された例が含まれています。

于 2012-12-06T16:55:08.693 に答える