0

2 つのオートコンプリート ウィジェットを含むフォームに取り組んでいます。最初のウィジェットは会社名を取得し、フォームに他のさまざまな項目を入力します。

<?php $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
    'attribute'=>'company_name',
    'model'=>$model,
    'sourceUrl'=>array('company/aclist'),
    'options'=>array(
        'minLength'=>'2',
        'select'=>'js: function(e,u){
            $("#'.CHtml::activeId($model,'company_address').'").val(u.item.address);
            $("#'.CHtml::activeId($model,'company_phone').'").val(u.item.phone);
            $("#'.CHtml::activeId($model,'company_id').'").val(u.item.id);
        }',
    ),
    'htmlOptions'=>array(
        'size'=>45,
        'maxlength'=>45,
    ),
 ));?>

これは完全に機能します。2 番目のウィジェットは、その会社に関連付けられた連絡先を取得するためのものであることを除いて、非常によく似ています。company_id値を 2 番目のオートコンプリートに渡すにはどうすればよいですか?

これは私が試したものですが、うまくいきませんでした:

'sourceUrl'=>array(
    'company/aclist',
    array("id"=>"js:$('#".CHtml::activeId($model,'company_id')."').val();"),
),

これを達成する方法について他に提案はありますか?

4

1 に答える 1

0

正しい構文は次のとおりです。

'sourceUrl'=>array(
     "company/aclist", "id"=>"js:$('#".CHtml::activeId($model,'company_id')."').val();")
),

しかし、問題があるのではないかと心配しています。「js:$(..」は文字列として扱われるため、評価されないことはほぼ確実です。したがって、ここで提供されているソリューションを実装することをお勧めします。

このソリューションは、'sourceUrl' が CHtml::normalizeUrl() を呼び出し、次に CHtml::createUrl() を呼び出すため、ここで適用できます。「クリック」イベントを「変更」に変更する必要があります。もちろん、他にも修正が必要な部分はありますが、それを解決できることを願っています。

于 2012-05-16T20:03:05.537 に答える