Skip to content

Instantly share code, notes, and snippets.

@neisdev
Created December 19, 2022 10:31
Show Gist options
  • Select an option

  • Save neisdev/23f58d4acb0a0c663c734bce73c0524a to your computer and use it in GitHub Desktop.

Select an option

Save neisdev/23f58d4acb0a0c663c734bce73c0524a to your computer and use it in GitHub Desktop.
Alpine.js Double Click to Edit
<div x-data="data()" class="p-4">
<a @click.prevent @dblclick="toggleEditingState" x-show="!isEditing" x-text="text" class="select-none cursor-pointer underline text-blue-500"></a>
<input type="text" x-model="text" x-show="isEditing" @click.away="toggleEditingState" @keydown.enter="disableEditing" @keydown.window.escape="disableEditing" class="bg-white focus:outline-none focus:shadow-outline border border-gray-300 rounded-lg py-2 px-4 appearance-none leading-normal w-128" x-ref="input">
</div>
function data() {
return {
text: "Example text. Double click to edit",
isEditing: false,
toggleEditingState() {
this.isEditing = !this.isEditing;
if (this.isEditing) {
this.$nextTick(() => {
this.$refs.input.focus();
});
}
},
disableEditing() {
this.isEditing = false;
}
};
}
<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.js"></script>
.w-128 {
width: 32rem;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/1.2.0/tailwind.min.css" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment