teratail header banner
teratail header banner
質問するログイン新規登録
Svelte

Svelteとは、Web上で動作するUIを構築するJavaScriptフレームワーク。コンパイラに分類され、仮想DOMを使用しない点がメリットです。少ない記述でUI構築できるため、コーディングの負担も減らせます。

Q&A

0回答

65閲覧

SvelteのonClickが走らない

nqf6nbs

総合スコア3

Svelte

Svelteとは、Web上で動作するUIを構築するJavaScriptフレームワーク。コンパイラに分類され、仮想DOMを使用しない点がメリットです。少ない記述でUI構築できるため、コーディングの負担も減らせます。

0グッド

0クリップ

投稿2025/05/25 05:36

編集2025/05/25 05:40

0

0

実現したいこと

svelteでナビゲーション入りのモーダルメニューを作成しています。
リンク先により、ページ内遷移となる場合があるのですが
その際にモーダルメニューをOFFに切り替えたいです。

発生している問題・分からないこと

aタグや、親のliタグににonClickを設定して試してみましたが
ページ内遷移されるのみで、onClickは走っていないようでした。

該当のソースコード

svelte

1<script> 2 export let menu; 3 4 let show = false; 5 const handleClick = () => { 6 document.body.style.overflow = show ? '' : 'hidden'; 7 show = !show; 8 }; 9 const handleClickAnchor = () => { 10 console.log('click'); 11 document.body.style.overflow = ''; 12 document.startViewTransition(() => { show = false }); 13 }; 14</script> 15 16<button transition:fade onclick={() => handleClick()}>toggle</button> 17<nav transition:fade> 18 <ul> 19 {#each menu as item} 20 <li> 21 <a href={item.url} onClick={() => handleClickAnchor()}>{item.name}</a> 22 </li> 23 {/each} 24 </ul> 25</nav>

menuSetting

1const menu = [ 2 { 3 name: "Home", 4 url: "/", 5 }, 6 { 7 name: "News", 8 url: "/#news", // 同ページでクリックした場合もモーダルをオフにしたい 9 }, 10 { 11 name: "Contact", 12 url: "/contact", 13 external: false, 14 }, 15]

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

onClickを設定する要素を変えてみたり、startViewTransitionありなしで試したりしましたが
そもそもconsole.logが表示されないので、
根本的に記述方法が間違っているかもしれないのですが、調べきれずご相談した次第です。
恐れ入りますがご教示いただけるとありがたいです。

補足

"svelte": "^5.30.1"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2025/05/25 06:46

> ページ内遷移されるのみで、onClickは走っていないようでした。 ページ「内」遷移(別なページに移るのではない)、というのは間違いないですか?
nqf6nbs

2025/05/25 06:57

コメントありがとうございます! 情報の不足大変申し訳ありません。 このsvelte製モーダルは、astroのページでLayout経由で読み込んでいます。 現在地が index.astro(トップページ)の状態でモーダルを開き、 リンク先が「href="/#news"」のaタグをクリックすると スムーススクロールで該当箇所へ移動するがモーダルは表示されたまま、というのが現状です。 (モーダルが透けてるのでスムーススクロールで移動してるのが見える) こういった状況で「ページ内遷移」と表現してしまいましたが誤りでしたら申し訳ありません。 ちなみにClientRouterのビュートランジションは読み込んでいません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問