Hi Team,
I am working on requirement, where autocomplete list-item have button inside it. User can selected option by clicking on list-option or user can click on button for different functionality. Need to disable default event if user clicks on button and pass selected item to parent
I am adding screenshot of itemTemplate along with code.
Itemtemplate:
Data() property:
HTML
Methods:
Thanks & Regards,
Sandeep G
|
<template>
<div>
<div class="control-section">
<div id="content"style="margin: 0px auto; width: 300px; padding-top: 40px" >
<ejs-autocomplete id="employees" :dataSource="data" :fields="fields"
:placeholder="watermark" :headerTemplate="hTemplate" :itemTemplate="iTemplate"
:open="onOpen" popupHeight="450px" cssClass="autocomplete-template">
</ejs-autocomplete>
</div>
</div>
</div>
</template>
<style>
</style>
<script>
import Vue from "vue";
import { AutoCompletePlugin } from "@syncfusion/ej2-vue-dropdowns";
import * as data from "./dataSource.json";
//import { data } from "./datasource.js";
import { actionButton } from "./main"; Vue.use(AutoCompletePlugin); var itemVue = Vue.component("itemTemplate", {
template:
'<div><img class="empImage" :src="data.Eimg" alt="employee"/>' +
'<span class="ename"> {{data.Name}} </span><div class="job"> {{data.Designation}} </div></div>',
data() {
return {
data: {},
};
},
});
export default Vue.extend({
data: function () {
return {
. . .
},
methods: {
onOpen: function (e) {
var names = e.popup.element.querySelectorAll(".ename");
for (var i = 0; i < names.length; i++) {
names[i].addEventListener("click", this.clickHandler);
}
},
clickHandler: function (e) {
alert(e.target.innerHTML);
},
},
}); </script> |
Hi Gunasekar,
Thanks for your reply. In example provided by you, we are able to get innerHTML of span but I require complete object of the item and keep the list open for the user to select other items of the list, currently list is getting closed after clicking on span.
Regards,
Sandeep G
Hi Team,
I look forward to receiving response from you.
Regards,
Sandeep G
|
<template>
<div>
<div class="control-section">
<div id="content" style="margin: 0px auto; width: 300px; padding-top: 40px">
<ejs-autocomplete ref="autoCompleteRef" id="employees" :dataSource="data" :fields="fields"
:placeholder="watermark" :headerTemplate="hTemplate" :itemTemplate="iTemplate"
:close="onClose" :open="onOpen" popupHeight="450px" cssClass="autocomplete-template">
</ejs-autocomplete>
</div>
</div>
</div>
</template>
<style>
</style>
<script>
import Vue from "vue";
import { AutoCompletePlugin } from "@syncfusion/ej2-vue-dropdowns";
import * as data from "./dataSource.json";
Vue.use(AutoCompletePlugin);
. . .
var itemVue = Vue.component("itemTemplate", {
template:
'<div><img class="empImage" :src="data.Eimg" alt="employee"/>' +
'<span class="ename" > {{data.Name}} </span><div class="job"> {{data.Designation}} <span v-on:mousedown="onButtonMouseDown($event)" class="customButton"> Click</span> </div></div>',
data() {
return {
data: {},
};
},
methods: {
onButtonMouseDown: function (e) {
var target = e.target.offsetParent.id;
var index = parseInt(target.split("-").pop(), 10);
console.log(this.$parent.ej2Instances.dataSource[index]);
},
},
});
export default Vue.extend({
data: function () {
return {
isButtonClick: false,
fields: { value: "Name" },
watermark: "e.g. Andrew Fuller",
hTemplate: function (e) {
return {
template: headerVue,
};
},
iTemplate: function (e) {
return {
template: itemVue,
};
},
data: data["empList"],
};
},
methods: {
onOpen: function (args) {
args.popup.element.addEventListener("mousedown", this.clickHandler);
},
clickHandler: function (e) {
if (!e.target.classList.contains("customButton")) {
var clickTarget = e.target.offsetParent.id;
var itemIndex = parseInt(clickTarget.split("-").pop(), 10);
console.log(
this.$refs.autoCompleteRef.ej2Instances.dataSource[itemIndex]
);
this.isButtonClick = false;
this.$refs.autoCompleteRef.ej2Instances.hidePopup();
this.tempValue.hide();
} else {
this.isButtonClick = true;
}
},
onClose: function (args) {
this.tempValue = args.popup;
if (this.isButtonClick) {
args.cancel = true;
}
},
}, }); |