为什么JQueryUI不能用于salesforce标准输入元素?

时间:2011-10-10 15:00:59

标签: jquery-ui salesforce visualforce

我在使用带有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输入元素一起使用。在我的例子中,没有为salesforce元素触发JQueryUI事件。

2 个答案:

答案 0 :(得分: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;
    }
}

希望有所帮助,
马特

答案 1 :(得分:0)

我弄清楚了JQeuryUI没有使用SalesForce标准输入元素的原因。我试图在输入元素上使用JQueryUI自动完成。应该调用的动作函数没有被调用,因为我没有

<apex:actionFunction immediate="true" />

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