質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

4回答

839閲覧

JavaScript closest

ertfds

総合スコア18

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/09/06 15:59

textをクリックします
その親のformノードへアクセスしたいのですがnullになってしまいます

<table border="0" cellpadding="2" cellspacing="2">を消すとアクセスできます

原因がわかる方教えていただけないでしょうか
そしてどうやればtextの親要素であるformへアクセスできますでしょうか?

window.onclick=function(e){ element=e.target.closest('form'); console.log(element); }
<table border="0" cellpadding="2" cellspacing="2"> <form method="POST" action="."> <input type="text" name="name"> ```

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

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

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

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

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

m.ts10806

2022/09/06 21:05

HTMLも全てコピペで提示されたほうが良いかと思います。 form/inputをそこに置いている意図は何でしょうか?
guest

回答4

0

ベストアンサー

<table>の直下に <form><input> を入れることはできません。HTMLパーザがこれを修正しようとして、結果として <input><form> の子供ではなくなります。

ただしフォーム的には所有関係が保たれているので、e.target.closest('form') は動きませんが e.target.form<form> にアクセスすることができます。

投稿2022/09/06 21:34

int32_t

総合スコア20882

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

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

ertfds

2022/09/06 23:25

代替え案までありがとうございます 納得しました
guest

0

HTMLが文法的に間違っているからでしょう。

<table>: 表要素 - HTML: HyperText Markup Language | MDN

上記の許可されている内容<form>はありません。

下記のように文法的に正しいものに書き換えれば、提示のjsでformを認識できます。

html

1<table border="0" cellpadding="2" cellspacing="2"> 2 <tr> 3 <td> 4 <form method="POST" action="."> 5 <input type="text" name="name"> 6 </form> 7 </td> 8 </tr> 9</table>

補足
上記のリンク先にも記述がありますが、border cellpadding cellspacing は非推奨の属性です。
CSSでの設定に置き換えた方がいいでしょう。

投稿2022/09/06 20:56

編集2022/09/06 21:05
hatena19

総合スコア33715

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

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

ertfds

2022/09/06 23:24

なるほど、そういうことだったんですね、納得しました ありがとうございました
guest

0

inputをformタグ内に挟み込む必要はないので以下のようなやり方もできます

javascript

1<script> 2document.addEventListener('click',e=>{ 3 console.log(e.target.form); 4}); 5</script> 6<form id="frm"></form> 7 8<table border="0" cellpadding="2" cellspacing="2"> 9<tr> 10<td> 11<input type="text" name="name" form="frm"> 12</td> 13<td> 14<input type="text" name="name" form="frm"> 15</td> 16</tr> 17</table>

投稿2022/09/07 01:24

yambejp

総合スコア114839

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

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

0

多分form要素はwindowの親要素じゃないからだと思いますよ〜!下のを試してみてください!

JavaScript

1//htmlのname属性で指定しています。 2document.getElementsByName("name")[0].onclick = function(e){ 3 const element = e.target.closest('form'); 4 console.log(element); 5};

投稿2022/09/06 18:36

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問