2011-10-10 62 views
2

我在使用JQueryUI和salesforce標準元素時遇到了問題。基本上,我想自動向用戶建議記錄名稱,而不是用戶單擊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> 

因此,我想知道是否有人試圖在標準salesforce輸入元素中使用JQueryUI。在我的情況下,JQueryUI事件不會觸發salesforce元素。

回答

0

我想通了,爲什麼JQeuryUI沒有對Salesforce的標準輸入工作的原因元件。我試圖在輸入元素上使用JQueryUI自動完成功能。本來應該被調用操作函數不叫,因爲我沒有

<apex:actionFunction immediate="true" /> 

這是我們必須有直接= true屬性設置,使得動作功能立即調用。如果我們沒有這個屬性集,SalesForce會嘗試驗證所有的標準輸入元素,並且如果驗證失敗,則不會調用動作函數。

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

希望幫助,
馬特

+0

我明白你想說什麼。我們已經遇到了這個問題,正在使用您列出的解決方案。但是,這個問題似乎與salesforce有關。一些像源代碼,搜索等自動完成事件如何不被調用。自動完成工作,如果你有一個靜態的來源(如數組)。但是,如果我動態地調用一個動作函數,它就不起作用。 – pphanireddy

+0

您是否嘗試過使用[Javascript Remoting](http://www.salesforce.com/us/developer/docs/pages/Content/pages_js_remoting.htm)來獲取您的數據? –

+1

是的,我們考慮過這個選項。 – pphanireddy

相關問題