Autocomplete feature is working great but when there are two Contact blocks and when I try to search for contact then it updates both Contact blocks.How do I make sure it updates only the block that I searched on.
<apex:page Controller="AutoCompleteController" sidebar="false" showHeader="false">
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/themes/smoothness/jquery-ui.css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js"></script>
<apex:remoteObjects >
<apex:remoteObjectModel name="Contact" fields="Id,Name,Email,Phone"/>
</apex:remoteObjects>
<script>
function autocompleteonfocus(){
var selectedId = null;
$('input[id$=conName],input[id$=conEmail],input[id$=conPhone]').autocomplete({
minLength: 2,
delay: 500,
source: function( request, response ) {
var ContactRO = new SObjectModel.Contact();
ContactRO.retrieve({where: {Name: {like: request.term + "%" }}}, function(err, records, event) {
if (err) {
alert(err);
} else {
var result = [];
records.forEach(function(record) {
result.push( {
label: record.get("Name"),
value: record.get("Id"),
Name : record.get("Name"),
Email: record.get("Email"),
Phone: record.get("Phone"),
});
});
response(result);
}
});
},
select: function(event, ui) {
event.preventDefault();
$('input[id$=conEmail]').val(ui.item.Email);
$('input[id$=conName]').val(ui.item.Name);
$('input[id$=conPhone]').val(ui.item.Phone);
selectedId = ui.item.value;
},
});
}
</script>
<apex:form >
<div style="margin-left: 5%; margin-right: 5%;margin-top: 5%;">
<apex:outputPanel id="cPanel">
<apex:variable value="{!0}" var="cnt" />
<apex:repeat value="{!conList}" var="con" id="conRepeatId">
Name:
<apex:inputText value="{!con.Name}" id="conName" onfocus="autocompleteonfocus();"/>
<br/>
Email :
<apex:inputText value="{!con.Email}" id="conEmail" onfocus="autocompleteonfocus();" />
<br/>
Phone Number:
<apex:inputText value="{!con.Phone}" id="conPhone" onfocus="autocompleteonfocus();"/>
<br/>
<apex:outputPanel rendered="{!IF(cnt>0,true,false)}">
<apex:commandButton value="Remove" action="{!removeContact}" immediate="true" rerender="cPanel">
<apex:param name="index" value="{!cnt}" />
</apex:commandButton> <br/>
</apex:outputPanel>
<apex:variable var="cnt" value="{!cnt+1}" />
</apex:repeat>
</apex:outputPanel>
<apex:commandButton value="Add Contact" action="{!addContact}" rerender="cPanel" />
</div>
</apex:form>
</apex:page>
public class AutoCompleteController {
public list<Contact> conList {get;set;}
public AutoCompleteController(){
conList = new list<Contact>();
Contact c = new Contact();
conList.add(c);
}
public void addContact() {
Contact c = new Contact();
conList.add(c);
}
public void removeContact(){
Integer indexVal = Integer.valueof(system.currentpagereference().getparameters().get('index'));
conList.remove(indexVal - 1);
}
}