2

我在使用带有 Salesforce 标准元素的 JQueryUI 时遇到问题。基本上,我想自动向用户建议记录名称,而不是用户单击 salesforce 搜索按钮。

<apex:inputField value="{!MyRecord.ChildRecord__c}" id="inpId" required="true/>

<script>
   jq$(document.getElementById('{!$Component.inpId}')).autocomplete( { 
            minLength: 2,
            autoFocus: true,
            source: mySource
   });
</script>

因此,我想知道是否有人尝试将 JQueryUI 与标准 salesforce 输入元素一起使用。在我的情况下,JQueryUI 事件不会为 salesforce 元素触发。

4

2 回答 2

2

{!$Component.[elementid]}并不总是对我有用;我不确定为什么。我更喜欢使用属性以选择器结尾(http://api.jquery.com/attribute-ends-with-selector/)。

尝试这样的事情:

<apex:includeScript value="/soap/ajax/18.0/connection.js" />
<apex:includeScript value="/soap/ajax/18.0/apex.js" />

<script>
    var j$ = jQuery.noConflict();
    j$(document).ready(function(){init();});

    function init()
    {
        var mySourceText = "ActionScript AppleScript Asp BASIC C "
           + "C++ Clojure COBOL ColdFusion Erlang Fortran Groovy "
           + "Haskell Java JavaScript Lisp Perl PHP Python Ruby "
           + "Scala Scheme";

        var mySource = mySourceText.split(" ");

        j$("[id$='myInput']").autocomplete({ 
            minLength: 2,
            autoFocus: true,
            source: function(request, response){ 
                    response(GetSourceAjaxAPI(request.term)); }
        });
    }

    function GetSourceAjaxAPI(s)
    {
        var result = sforce.apex.execute("TestAutocomplete", 
                     "GetAutocompleteValuesAjaxAPI", {SearchTerm:s});
        return result;
    }
</script>

<apex:form >
    <apex:pageblock >
        <apex:pageblocksection >
            <apex:pageblocksectionitem >
                <apex:inputfield id="myInput" value="{!Contact.FirstName}" />
            </apex:pageblocksectionitem>
        </apex:pageblocksection>
    </apex:pageblock>
</apex:form>

控制器:

global class TestAutocomplete 
{
    global TestAutocomplete(ApexPages.StandardController myStandardController) {}

    webservice static List<String> 
        GetAutocompleteValuesAjaxAPI(String SearchTerm)
    {            
        String mySourceText = 'ActionScript AppleScript Asp BASIC C '
           + 'C++ Clojure COBOL ColdFusion Erlang Fortran Groovy '
           + 'Haskell Java JavaScript Lisp Perl PHP Python Ruby '
           + 'Scala Scheme';

        List<String> mySourceList = mySourceText.split(' ');
        List<String> myReturnList = new List<String>();

        for(String s : mySourceList)
        {
            if(s.contains(SearchTerm)){ myReturnList.add(s); }
        }

        return myReturnList;
    }
}

希望有帮助,
马特

于 2011-10-10T16:42:45.093 回答
1

我找到了 JQeuryUI 无法处理 SalesForce 标准输入元素的原因。我试图在输入元素上使用 JQueryUI 自动完成功能。应该调用的动作函数没有被调用,因为我没有

<apex:actionFunction immediate="true" />

也就是说,我们必须设置 immediate=true 属性,以便立即调用动作函数。如果我们没有设置此属性,SalesForce 会尝试验证所有标准输入元素,如果验证失败,则永远不会调用 action 函数。

于 2011-10-29T17:29:56.450 回答