VFページのJavaScriptのスニペットに問題があり、コードが壊れている場所を誰かが教えてくれることを期待しています。小さな背景を与えるために、VFページには、JSによって読み取られ/更新される選択リストと入力フィールドがあります。スクリプトにはjqueryコードがあり、コントローラーから一致する可能性のあるリストを(リモート呼び出しを介して)取得することにより、製品入力テキストフィールドを完成させます。結果を縮小するために、[ラインタイプ]選択リストから価格表IDとlineTypeを渡します。ユーザーが入力フィールドに結果を入力する前に結果を「キャッシュ」するために、onchangeイベントでコードを実行するように線種を取得しようとしています。これまでの私のsoeでは、線種変更イベントがコードを起動しており、アラートに基づいて、コントローラーのメソッドが呼び出され、リストを返していることがわかります。
1).changeイベントは複数回発生しないため、最初に選択リストの値を変更すると、コードが実行されてリモート呼び出しが実行されますが、その後の選択リストへの変更によってコードが再度実行されることはありません。何故ですか?選択リストの選択に変更が加えられたときに、.changeが常に起動するべきではありませんか?
2)オートコンプリートは、呼び出しからの再利用に基づいて値を提案していません。つまり、リモート呼び出しから返された提案を含むポップアップが表示されません。
以下は関連するコードです(VFページ、js、コントローラーメソッド)。誰かが私に手を貸してください!
VF + jsコード:
<script>
var pop, prodNames, pbId, lineType, availableProds;
$j = jQuery.noConflict();
$j(function() {
$j("select[id$='fLineType']").change(function() {
pbId = $j("input[id$='pbid']").val();
lineType = $j(this).val();
alert('Line type selected' + $j(this).val() + ' - ' + pbId );
// call remote apex method and get chache list of Prod Names:
SalesDocumentManager_Controller.cacheProdNames(pbId, lineType,
function(result, event){
alert('Result from remote call: ' + result);
availableProds = result;
},
{escape: true}
);
});
$j("input[id$='prodName']").autocomplete({
source: availableProds,
minLength: 3
});
});
コントローラのリモートメソッド(現在ダミーデータを返す)://以下で作成された値を返すため、これは機能しているようです。
@RemoteAction
public static String[] cacheProdNames (String pbId, String lineType) {
system.debug('###remote action is executing');
String[] prodNames = new List<String>();
prodNames.add('testProd');
prodNames.add('testProd 2');
return prodNames;
}