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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

5回答

1320閲覧

入れ子になったonclickはどうしたらいいですか?

eaconian

総合スコア21

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2018/09/14 06:00

編集2018/09/14 06:01

onclickをHTMLに書くとき、JS側で入れ子になっていたら発動しませんでした。

これはどのように解決するものなのでしょうか?

HTML

1<div id="button" onclick="inner();">ボタン</div> 2

javascript

1function outer(){ 2 3 function inner(){ 4 alert('押しましたね?'); 5 } 6 7 alert('ようこそ!'); 8 9} 10outer();

ページにアクセスしたら「ようこそ!」が表示され、ボタンを押すと「押しましたね?」が表示されるようにしたいのですが…
初歩的な質問ですみません。

###補足
ちなみに次のような対処でなくて、あくまで入れ子の状態のまま、HTMLのonclickを使いたい。という目的です。

jQuery

1$('#button').on('click', function() { 2 alert('押しましたね?'); 3});

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

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

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

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

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

m.ts10806

2018/09/14 06:05

わざわざそうしたいということは何らかの目的(または課題)があるのでしょうか?
eaconian

2018/09/15 02:01

はい、ただひどく個人的な事情ですので割愛させて頂きます。
guest

回答5

0

ベストアンサー

近い形だとこうでしょうか?

javascript

1<script> 2function outer(){ 3 alert('ようこそ!'); 4 this.inner=function(){ 5 alert('押しましたね?'); 6 } 7} 8var o=new outer(); 9</script> 10<div id="button" onclick="o.inner();">ボタン</div>

投稿2018/09/14 07:09

yambejp

総合スコア114769

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

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

eaconian

2018/09/15 01:57

こちらも良いですね。ありがとうございます。
eaconian

2018/09/15 22:44

yambejpさま、おはようございます。今回ご回答の皆さまに僭越ながらお願いがございます。 今回の質問ですが、後に https://teratail.com/questions/146752 の質問にも関連させられるつもりでおりました。 同様にクリックイベントの入れ子(今回とは違いjQueryの「.on('click', function() {」ですが)という話なのですが思うようにできず、何か良いお知恵を拝借させて頂けませんでしょうか。
guest

0

あくまで入れ子の状態のまま、HTMLのonclickを使いたい。という目的です。

なぜそのようなことをしたいのでしょうか。

onclickで関数を使うには、それがグローバルとなっていなければなりません。内側でwindow.inner = inner;とすれば一応はできますが、理由次第ではこれが不適当かもしれません。

投稿2018/09/14 06:05

maisumakun

総合スコア145183

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

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

eaconian

2018/09/15 02:00

ありがとうございます。理由は長いので割愛させてください。アドバイス感謝致します。
guest

0

ようするに、何としてもグローバル変数にしたいのですね。
返り値で受け取ったり、

JavaScript

1var inner = (function outer () { 2 alert('ようこそ!'); 3 4 return function inner(){ 5 alert('押しましたね?'); 6 } 7}());

グローバルオブジェクトのプロパティにします。

JavaScript

1(function outer () { 2 alert('ようこそ!'); 3 4 Function('return this')().inner = function inner(){ 5 alert('押しましたね?'); 6 }; 7}());

しかしながら、グローバル変数は衝突の危険性がある為、基本的に推奨されません。

Re; eaconian さん

投稿2018/09/14 11:20

think49

総合スコア18162

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

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

eaconian

2018/09/15 01:57

まったくない発想でした。ありがとうございます。
eaconian

2018/09/15 22:36

think49さま、おはようございます。 今回の質問ですが、後に https://teratail.com/questions/146752 の質問にも関連させられるつもりでおりました。 同様にクリックイベントの入れ子(今回とは違いjQueryの「.on('click', function() {」ですが)という話なのですが思うようにできず、何か良いお知恵を拝借させて頂けませんでしょうか。
guest

0

入れ子を直接呼び出すのは難しい(というかこの構造ではできなさそう)ので、両方親を呼び出して引数で切り替えですかね。

html

1<div id="button" onclick="outer(false);">ボタン</div>

js

1function outer(f){ 2 if(!f){ 3 return inner(); 4 } 5 function inner(){ 6 alert('押しましたね?'); 7 } 8 alert('ようこそ!'); 9} 10outer(true);

投稿2018/09/14 06:11

m.ts10806

総合スコア80850

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

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

eaconian

2018/09/15 01:58

なるほど、この工夫でも良いのですね。ありがとうございます。
eaconian

2018/09/15 22:45

mts10806さま、おはようございます。お世話になっております。 今回の質問ですが、後に https://teratail.com/questions/146752 の質問にも関連させられるつもりでおりました。 同様にクリックイベントの入れ子(今回とは違いjQueryの「.on('click', function() {」ですが)という話なのですが思うようにできず、何か良いお知恵を拝借させて頂けませんでしょうか。 追加でお手数おかけして申し訳ございません…。
guest

0

js

1function outer(){ 2 alert('ようこそ!'); 3} 4outer(); 5function inner(){ 6 alert('押しましたね?'); 7} 8```もしくは 9```js 10alert('ようこそ!'); 11function inner(){ 12 alert('押しましたね?'); 13}

投稿2018/09/14 06:04

kei344

総合スコア69398

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

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

eaconian

2018/09/15 01:58

ありがとうございます。質問に補足する前の状態でのご回答ですね。参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問