11

フォームに簡単なチェック ボックスを追加したいと思います。

$element = new Zend_Form_Element_Checkbox('dont');
$element->setDescription('Check this box if you don\'t want to do this action.');
$form->addElement($element);

ただし、html は次のようになります。

<dt id="dont-label">&nbsp;</dt>
<dd id="dont-element">
    <input type="hidden" name="dontAttach" value="0">
    <input type="checkbox" name="dontAttach" id="dontAttach" value="1">
    <p class="description">Don't attach a bulletin. I only want to send an email.</p>
</dd>

これの問題は、jQuery を使用して、DT 内のラベルと DD 内の非表示要素を持つすべての DT/DD を非表示にしていることです&nbsp;(したがって、html が検証され、非表示要素がスペースを占有しません)。ページ)。Zend_Form_Element_Checkbox非表示の入力要素を表示せずにa を使用する方法はありますか? 警告を追加するために jQuery コードを台無しにしたくはありませんが、必要に応じてそうします。

解決:

どうやら、チェックボックス要素の前に隠し要素を削除できない/削除すべきではありません。したがって、すべての非表示のフォーム要素がページに表示されないようにするための jQuery コードは次のとおりです。

//fix zf hidden element from displaying
$('input[type=hidden]').filter(function() {
    var noLabel = $(this).closest('dd').prev('dt').html() === '&nbsp;';
    var onlyChild = $(this).is(':only-child');
    if (noLabel && onlyChild) {
        return true;
    }
    return false;
}).each(function() {
    $(this).closest('dd').hide()
           .prev('dt').hide();
});
4

6 に答える 6

5

トピックは本当に古いですが、数日前に同様の問題を発見しました-javascriptによって動的にフォームを作成します-(+)をクリックすると、表示されたフォームに行(1つの非表示の入力、2つのチェックボックスと2つの選択)が追加されます。

サーバーに_POSTを送信すると、las行が正しく送信されないことがわかりました。選択されたチェックボックスの代わりに、非表示のデフォルトのゼロが送信されます。解決策は、チェックボックスを配列として設定することです。

$c = new Zend_Form_Element_Checkbox( 'check1' );
$c->setIsArray( true );

この場合、追加の非表示の入力はレンダリングされません。

PS。私の英語でごめんなさい;)

于 2010-10-06T14:24:10.270 に答える
5

フォーム要素のレンダリング方法を変更するには、デコレータを使用できます。

// Overwrite existing decorators with this single one:
$element->setDecorators(array('Composite'));

すべてのデフォルトのデコレーターのリストについては、標準のデコレーターを参照してください。フォーム フィールドで使用されるデコレータのリストについては、標準のフォーム要素を参照してください。

非表示のフォーム要素は正確な目的で Zend から追加されているように思えますが、それを削除すると (可能であれば) いくつかの問題が発生する可能性があります。私が最初に考えたのは、Zend はその隠しフォームを使用して、値が変更されたかどうかを確認したり、from が実際に Zend から生成されたものであるかどうかを検証したりすることです (この仮説はあまり妥当ではないようです)。

于 2009-12-22T00:41:37.223 に答える
1

チェックボックスの隠し要素を自分で見つけました。投稿の解決策はありませんが、隠しフィールドについての考えを追加したいと思います。これは、ユーザーがボックスをオフにしない場合でも、値 0 が渡されるためです。それ以外の場合、チェックボックスは投稿されません。

于 2011-08-25T19:22:04.030 に答える
1

アンドリュー、非表示のフォーム要素を実際に非表示にする方法は次のとおりです。

$element1 = $form->createElement('hidden', 'element1');
$element1
  ->setDecorators(array(
    'ViewHelper',
    array('HtmlTag', array('tag' => 'dd'))
  ));

これで、それらを縮小するために jQuery コードをいじる必要はなくなりました。また、非表示のチェックボックス フィールドについても心配する必要はありません。

于 2009-12-22T00:44:49.137 に答える
1

属性 disableHidden をチェックボックス フォーム要素に追加して、レンダリング中に隠しフィールドを追加できないようにすることができます。

$chk = new Zend_Form_Element_Checkbox('test_checkbox');
$chk->setAttrib('disableHidden', true);
于 2015-04-01T11:24:56.140 に答える
1

スレッドは古いですが、正しい答えはありません...

私は同じ問題を抱えていましたが、私はそれを理解したので、ここに正しい答えがあります:

チェックボックスの値がチェックされていないときに投稿され、チェックされているときにのみ値を送信するのが気に入らない場合は、次のコードを使用してください。

$chk = new Zend_Form_Element_Checkbox('test_checkbox');
$chk->setRequired();
$chk->setUncheckedValue(null);
$chk->setCheckedValue(1);
...

チェックされた値は「some_value」ですが、チェックボックスがオフの場合、値はnullであるため、「必須」が設定されているため検証されません。今のところ私にとってはうまくいき、隠しフィールドなどを削除するために「洗練された」jqueryスクリプトを使用する必要はありません.

于 2012-02-10T09:29:08.780 に答える