首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >alpine.js表编辑就地功能

alpine.js表编辑就地功能
EN

Stack Overflow用户
提问于 2021-07-14 21:46:45
回答 1查看 992关注 0票数 0

我正在尝试使用Alpine.js使表列可以内联编辑。这个想法是有一个“编辑到位”的功能,所以当一个行被双击允许内容是可编辑的。我遇到的问题是,当单击一个单元格时,它会激活所有行。

理想的行为只是点击的行应该是可编辑的,所有其他的都应该保持不可编辑。

我在这里预览了这个问题,https://codepen.io/ezeagwulae/pen/ZEKeYGQ

代码语言:javascript
复制
<div x-data="data()" class="p-4">
    <div class="uppercase font-bold">shopping items</div>
    <template x-for="item in items">
        <div>
            <a @click.prevent @dblclick="toggleEditingState" x-show="!isEditing" x-text="item.item" class="select-none cursor-pointer underline font-lg 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>
    </template>
</div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-16 04:36:15

在JS文件中,确保使用e.target获得双击输入字段。

在HTML模型中,应该将模型设置为item.item。下面是一个有用的例子。

HTML

代码语言:javascript
复制
<div x-data="data()" class="p-4">
    <div class="uppercase font-bold">shopping items</div>
    <template x-for="item in items">
        <div>
            <a @click.prevent @dblclick="toggleEditingState" x-show="!isEditing" x-text="item.item" class="select-none cursor-pointer underline font-lg text-blue-500"></a>
            <input type="text" x-model="item.item" 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>
    </template>
</div>

JS

代码语言:javascript
复制
function data() {
    return {
        text: "Double click to edit",
        isEditing: false,
        toggleEditingState(e) {
            const el = e.target
            this.isEditing = !this.isEditing;

            el.focus()
        },
        disableEditing() {
            this.isEditing = false;
        },
        items: [
            { id: 1, item: "apple" },
            { id: 2, item: "eggs" },
            { id: 3, item: "milk" }
        ]
    };
}

有什么建议只使单击的行可编辑,而不是所有行?例如,如果“鸡蛋”应显示该行的输入字段,其他行应保持原样。

例如:

代码语言:javascript
复制
<link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet"/>
<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.js"></script>
<div
            x-data="{
              items: [
                { id: 1, item: 'apple', edit: false },
                { id: 2, item: 'eggs', edit: false },
                { id: 3, item: 'milk', edit: false },
              ]
            }"
            class="p-4"
        >
            <div class="uppercase font-bold">shopping items</div>
            <template x-for="(item, index) in items">
                <div>
                    <a
                        @click.prevent
                        @dblclick="
                                        item.edit = true;
                                        $nextTick(() => $refs[item.id].focus());
                                     "
                        @click.away="item.edit = false"
                        x-show="!item.edit"
                        x-text="item.item"
                        class="
                            select-none
                            cursor-pointer
                            underline
                            font-lg
                            text-blue-500
                        "
                    ></a>
                    <input
                        type="text"
                        x-model="item.item"
                        x-show="item.edit"
                        @click.away="item.edit = false"
                        @keydown.enter="item.edit = false"
                        @keydown.window.escape="item.edit = false"
                        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="item.id"
                    />
                </div>
            </template>
        </div>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68385430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档