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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

HTML

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

Q&A

解決済

5回答

5260閲覧

【初心者質問】aタグ実行前にalert処理を挟みたい

MaShiRo_H

総合スコア328

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

HTML

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

0グッド

0クリップ

投稿2016/07/15 03:44

こんにちは!
お世話になっていますm(_ _)m

今回のご相談はタイトルの通り
「aタグ要素をクリックしたときにリンクへ飛ぶ前に処理を挟みたい」という内容です。

以前までは以下の挙動で動いておりました。
【全て削除】をクリック→入力ダイアログが出る→正しいユーザー名を入力した場合にのみ処理

ruby

1<%= link_to clear_users_url(@user), onClick: "return pass();" do %> 2全て削除 3<% end %>

javascript

1function pass(){ 2 password = window.prompt("削除する場合はユーザーの名前を入力してください"); 3 if(password == null) { 4 return false; 5 } else if(password !== "<%= @user.name %>") { 6 alert("正しいユーザーの名前を入力してください"); 7 return false; 8 } else if(password == "<%= @user.name %>") { 9 return true; 10 } 11}

ところが、sweet-alertというgemを導入したところ形式が変わり、
公式サイトを見ながらアレコレしてみたものの、上記の処理ができなくなってしまいました。

function pass(){ swal({ title: "全てのデータを削除します", text: "削除する場合はユーザーの名前を入力してください", type: "input", showCancelButton: true, closeOnConfirm: false, animation: "slide-from-top", }, function(inputValue){ if (inputValue == null || inputValue !== "<%= @user.name %>") { swal.showInputError("正しいユーザーの名前を入力してください"); return false; } else if (inputValue == "<%= @user.name %>") { return true; } }); };

上記の場合だと、そのままリンク処理が走ってしまいます。
また、変数flagを用意して、

javascript

1 function pass(){ 2 var flag = 0 3 swal({ 4 title: "全てのデータを削除します", 5 text: "削除する場合はユーザーの名前を入力してください", 6 type: "input", 7 showCancelButton: true, 8 closeOnConfirm: false, 9 animation: "slide-from-top", 10 }, function(inputValue){ 11 if (inputValue == null || inputValue !== "<%= @user.name %>") { 12 swal.showInputError("正しいユーザーの名前を入力してください"); 13 flag = 0; 14 } else if (inputValue == "<%= @user.name %>") { 15 flag = 1; 16 } 17 }); 18 if (flag == 0) { 19 return false; 20 } else if(flag == 1) { 21 return true; 22 } 23 };

にすると、最初の値がそのまま適用されてしまうのか、どんな場合でもリンクが走りません。。

融通のききにくい使用ですが、何か方法が見つかりそう...で、見つかりません;;
何か解決策の思いつく方がいらっしゃいましたら、アドバイスいただけると助かりますm(_ _)m

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

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

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

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

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

guest

回答5

0

k.tadaさんの言うとおり、いろいろやってみたけどfunctionの戻り値がうまく取れないので
やるならこうかなぁ・・・

HTML

1 <a href="" onclick="return pass('http://www.example.com/');">pass</a>

JavaScript

1function pass(url) { 2 3 swal({ 4 title: "全てのデータを削除します", 5 text: "削除する場合はユーザーの名前を入力してください", 6 type: "input", 7 showCancelButton: true, 8 closeOnConfirm: false, 9 animation: "slide-from-top", 10 }, function(inputValue){ 11 if (inputValue == null || inputValue !== "<%= @user.name %>") { 12 swal.showInputError("正しいユーザーの名前を入力してください"); 13 } else if (inputValue == "<%= @user.name %>") { 14 window.location.href = url; 15 } 16 }); 17 18 return false; 19}

投稿2016/07/15 05:47

Mr_Roboto

総合スコア2208

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

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

MaShiRo_H

2016/07/15 05:49

ご回答ありがとうございます! 上記の方法でうまく動かすことができました! 今までとやり方は異なりますが、正常に動くのでこれでいきたいと思います。
Mr_Roboto

2016/07/15 05:53

動いたみたいでよかったです。 Aタグで使うサンプル検索してみたけど、無いんですよねぇ なんのための return なのか もしかしたらもっとエレガントな方法を誰かが答えてくれるかもですね ^^
guest

0

ベストアンサー

function pass(){ swal({ 略 }, function(inputValue){ if (inputValue == null || inputValue !== "<%= @user.name %>") { swal.showInputError("正しいユーザーの名前を入力してください"); return false; } else if (inputValue == "<%= @user.name %>") { return true; } }); };

ここの return true/falseはswalの引数に渡したメソッドへの戻り値なので、pass()の戻り値にはならないですよ。

対応するならpass()の戻り値(true/false)でリンクの有効無効を切り替えるのではなく、pass()の中でリンク処理自体を行ってしまうのが一番簡単だと思います。

投稿2016/07/15 05:36

k.tada

総合スコア1679

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

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

MaShiRo_H

2016/07/15 05:40

ご回答ありがとうございます! やはりそれが一番なのでしょうか>< 一度その方法で試してみようと思います!!
MaShiRo_H

2016/07/15 05:47

試したところ、やはりその方法が一番のようでしたm(_ _)m 助かりました!ありがとうございました!
guest

0

手を動かして調べてみましたよっと
最後に return false; を入れると動くみたいですよ。

JavaScript

1function pass(){ 2 swal({ 3 title: "全てのデータを削除します", 4 text: "削除する場合はユーザーの名前を入力してください", 5 type: "input", 6 showCancelButton: true, 7 closeOnConfirm: false, 8 animation: "slide-from-top", 9 }, function(inputValue){ 10 if (inputValue == null || inputValue !== "<%= @user.name %>") { 11 swal.showInputError("正しいユーザーの名前を入力してください"); 12 return false; 13 } else if (inputValue == "<%= @user.name %>") { 14 return true; 15 } 16 }); 17 return false; 18}

投稿2016/07/15 04:55

Mr_Roboto

総合スコア2208

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

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

Mr_Roboto

2016/07/15 05:00

いや、違うな、これじゃダイアログが出るようになるだけでした失礼 ^_^;
MaShiRo_H

2016/07/15 05:23

ご回答ありがとうございます! 試してみたんですが、やはりそうですね×_×; いろいろ試しても、 ・ダイアログが出て、そのまま削除処理 ・ダイアログに何をしても常に無反応(return false) のパターンばかりで。。
guest

0

JavaScriptの2行目にローカル変数として「flag」が設定してあるのに、「function(inputValue){」内にグローバル変数として「flag」が設定してあるのがおかしいのでは?
if (flag == 0)以降では、2行目で設定されている「var flag = 0」を見に行くので、常にreturn falseされているのかなと。
2行目の「var flag = 0」を削っても同じでしょうか?

投稿2016/07/15 04:48

Takuma_Tanaka

総合スコア128

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

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

MaShiRo_H

2016/07/15 05:19

ご回答ありがとうございますm(_ _)m >2行目の「var flag = 0」を削っても同じでしょうか? 削るとダイアログが表示されてすぐ、削除処理が走ってしまいます;
guest

0

こういうこと?

HTML

1<a href="?delall=1" onclick="return confirm('削除して良い?');">すべてを削除</a>

投稿2016/07/15 04:07

yambejp

総合スコア114769

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

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

MaShiRo_H

2016/07/15 05:24

ご回答ありがとうございます!m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問