You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit+Tailwind项目添加新div后按钮完全失效求助

问题:SvelteKit下拉按钮添加新div后完全失效

我使用SvelteKit、TypeScript和Tailwind开发仿Discord风格网站,原本正常的下拉按钮在添加新div后彻底失效,甚至不会显示指针手势。

按钮组件代码

<script lang="ts">
let expanded: boolean = true;
export let item: string = '';
export let value: string[] = [];
import Page from '../Components/page.svelte';
let pagen: string = 'About';
</script>

<Page bind:page={pagen} run="" />
<div class="dropdown flex flex-col mt-5">
<button
    class="dropdown-toggle"
    on:click={() => {
        expanded = !expanded;
    }}
>
    <span class="dropdown-label text-gray-400 ml-5 flex text-lg"
        >{expanded ? `- ${item}` : `+ ${item}`}</span
    >
</button>
<div class="dropdown-content flex" style:display={expanded ? 'block' : 'none'}>
    {#each value as val}
        <div class="dropdown-item text-gray-400 ml-10">
            <p class="inline-block text-gray-400">#</p>
            <button
                on:click={() => {
                    pagen = `{val}`;
                }}>{val}</button
            >
        </div>
    {/each}
    </div>
</div>

页面组件代码

<script lang="ts">
export let page: string = 'About';
export let run: string = '';
</script>

{#if run == 'true'}
<div class="w-screen h-screen -z-10">
    <div class="page ml-80 bg-gray-800 h-screen">
        {#if page == 'About'}
            <div class="flex flex-col items-center justify-center">
                <h1 class="text-gray-400 text-3xl font-bold tracking-wider mt-10">Some Title</h1>
                <p class="text-gray-400 text-2xl font-bold tracking-wider">Some Label</p>
            </div>
        {/if}
    </div>
</div>
{/if}

网站截图

网站截图


问题原因及解决办法

1. 元素层级遮挡

页面组件中的全屏div(w-screen h-screen)即使设置了-z-10,仍可能因为按钮容器未显式设置层级,导致后续渲染的页面内容覆盖按钮,阻断点击事件。

解决:给按钮容器添加相对定位和更高层级,修改.dropdown类为:

<div class="dropdown flex flex-col mt-5 relative z-10">

2. 变量赋值语法错误

下拉项按钮中的pagen = {val}``写法错误,模板字符串不需要额外嵌套花括号,会导致pagen被设置为字符串"{val}"而非实际变量值。

解决:改为直接赋值变量:

on:click={() => {
    pagen = val;
}}

3. 样式逻辑优化

用Tailwind的条件类替代内联style:display,更符合框架使用习惯:

<div class="dropdown-content flex {expanded ? '' : 'hidden'}">

修改后的按钮组件示例

<script lang="ts">
let expanded: boolean = true;
export let item: string = '';
export let value: string[] = [];
import Page from '../Components/page.svelte';
let pagen: string = 'About';
</script>

<Page bind:page={pagen} run="" />
<div class="dropdown flex flex-col mt-5 relative z-10">
<button
    class="dropdown-toggle cursor-pointer"
    on:click={() => {
        expanded = !expanded;
    }}
>
    <span class="dropdown-label text-gray-400 ml-5 flex text-lg"
        >{expanded ? `- ${item}` : `+ ${item}`}</span
    >
</button>
<div class="dropdown-content flex {expanded ? '' : 'hidden'}">
    {#each value as val}
        <div class="dropdown-item text-gray-400 ml-10">
            <p class="inline-block text-gray-400">#</p>
            <button
                on:click={() => {
                    pagen = val;
                }}>{val}</button
            >
        </div>
    {/each}
    </div>
</div>

内容的提问来源于stack exchange,提问作者RatInChat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 04:36:17