使用JS远程处理和jquery的Visualforce页面无法按预期工作

时间:2012-11-28 11:00:05

标签: javascript jquery remoting visualforce

我在VF页面上遇到一段javascript的问题,我希望有人可以告诉我代码存在缺陷的地方。为了给出一个小背景,VF页面有一个选择列表和一个由JS读取/更新的输入字段。脚本中有jquery代码,通过从控制器检索可能的匹配列表(通过远程调用)来自动完成Product输入文本字段。为了缩小结果的尺寸,我将传递价格手册Id和线型选项列表中的lineType。我试图让linetype执行onchange事件上的代码,以便在用户在输入字段中输入结果之前“缓存”结果。到目前为止,线型更改事件是触发代码并基于警报,我可以看到控制器中的方法被调用并返回列表,但结果有2个问题:

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;
    }

0 个答案:

没有答案