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

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

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

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

HTML

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

Q&A

解決済

3回答

25914閲覧

JavascriptのonClickを条件付きで無効化したいです

TatsuyaNozawa

総合スコア7

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2015/11/08 08:29

###前提・実現したいこと
html内でリンククリック時にダイアログの表示がされる機能に条件付きの無効化を実現させたいです。

###発生している問題・エラーメッセージ
リンクは無効にできましたがダイアログが無効にできません。
###ソースコード
html,thymeleaf,JavaScript使用
ここにご自身が実行したソースコードを書いてください

<html> <head> <script type="text/javascript"> function pass_check() {
// パスワードの取得(myPassWord) myPassWord = prompt("パスワードを入力してください", ""); if (myPassWord == "pass") { return true; } else { alert("入力内容に誤りがあります。"); return false; } }

function disableLink() {

var target = document.getElementById("order"); if("students" == target.value) { document.getElementById("a").removeAttribute("href"); } else { document.getElementById("b").removeAttribute("href"); }

}
</script>

</head> <body onload="disableLink()"> <ul> <li><a id="a" href="xxxx" onClick="return pass_check();">a</a></li> <li><a id="b" href="xxxx">b</a></li> <input type="hidden" id="order" value="students" /> </body> </html>

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

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

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

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

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

guest

回答3

0

動作がおかしい原因は A要素onClick の仕様を勘違いしていることです。
A要素内にonClickが仕込んである場合、onClickを評価して以下のように動作します。

  • 戻り値が true :href属性の中身のURLにアクセス
  • 戻り値が false :アクセスする処理を中断する

質問者さんの意図した挙動にするには下記のように書き換えてください。
×:A要素内のhref属性を削除する
○:A要素内のonClick属性の値をreturn falseに変更する

投稿2015/11/08 09:25

miyabi-sun

総合スコア21158

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

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

TatsuyaNozawa

2015/11/08 10:52

解答ありがとうございます。 その状態に書き換えたところ、根本は解決できましたが、リンク先に遷移する制御ができなかったため、本解答を参考にいろいろとさぐってみます。
miyabi-sun

2015/11/08 14:10

あー・・・なるほど! 質問者さんが実現したい内容がわかりました。 `<input type="hidden" value="student">`とあるように、 ロール「学生」のユーザーがアクセスした場合はパスワードを入力すること無くリンク先に画面遷移して欲しいというわけですね? でしたら`return false`を`return true`と置き換えてください。 もしくはhref属性は残したままonClick属性を削除しましょう。 これで完全に意図した挙動になるかと思います。
guest

0

ベストアンサー

javascript

1if("students" == target.value) { 2 document.getElementById("a").removeAttribute("href"); 3 document.getElementById("a").removeAttribute("onclick");

とすれば、クリックしたときにダイアログ表示はされなくなります。
このようにした場合は
<a id="a" href="xxxx" onClick="return pass_check();">a</a>

<a id="a">a<a>
になるからです。

素の javascript でなく、jquery などをつかって
<a id="a" href="xxxx" onClick="return pass_check();">a</a>

a
に書き換えるという方法を取ることも検討するとよいかもしれません。

投稿2015/11/08 10:51

katoy

総合スコア22324

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

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

TatsuyaNozawa

2015/11/08 11:02

解答ありがとうございます。 その検証方法を検索して解決にすすめてみます。 本解答を参考にJQueryを使用する方向で考えてみます。
guest

0

動作は確認していませんが、document.getElementById("a").removeAttribute("href");と同じように、
属性onClickも削除すればできそうです。

投稿2015/11/08 09:08

argius

総合スコア9390

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

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

TatsuyaNozawa

2015/11/08 10:50

解答ありがとうございます。 その方法を試したのですが、うまくいかなかったのでもう少し探してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問