- PR -

ボタン連打制御

投稿者投稿内容
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2005-09-03 17:54
ピンクの恐竜さん。こんにちは。
解決済みのスレッドを続けてしまい、ごめんなさい。

引用:

onbeforeunloadの件ですがサンプルがほんとに大胆ですね。
ちょっとびっくりしました。

びっくりされるくらいの大胆さを狙ってみました。

さて、本題の
引用:
onbeforeunloadでreturnを使い処理を中断しようとすると
エンドユーザにわかりずらい確認ダイアログがでてしまい、
あきらめてました。

確認ダイアログをカスタマイズする。
または確認ダイアログを出さない方法は無いのでしょうか?

の件ですが、
私の知る限りでは、あのダイアログをカスタマイズする方法は有りません。

ですが、以下の様に記述すれば、挙げられてる要件を満たすことはできそうです。
コード:
  <script >
  window.onbeforeunload = function() {
    // 全リンクのクリックイベントを showBlockMessage で置き換える。
    for (var i = 0; i < document.links.length; i ++) {
      document.links[i].onclick = showBlockMessage;
    }
    // 全ボタンのクリックイベントを showBlockMessage で置き換える。
    for (var i = 0; i < document.forms[0].elements.length; i ++) {
      if (document.forms[0].elements[i].type == "button" ||
        document.forms[0].elements[i].type == "submit" ||
        document.forms[0].elements[i].type == "reset") {
        document.forms[0].elements[i].onclick = showBlockMessage;
      }
    }
  }

  // リクエストをブロックしたことを表示する関数
  function showBlockMessage() {
    alert("処理中です…");
    return false;
  }
  </script>



まぁ、こうなると既にでている方法(onloadで処理の置き換え)と大差有りませんが。
onbeforeunloadで置き換えた方が、条件分岐したり既存の処理を生かしたりする必要なく、無条件にonclickの処理を殺してしまえばいいので、楽ですかね。

以上、ご参考にして頂ければ幸いです。

# 自分で書いて、上のソースが気に入った。
# (半分以上ピンクの恐竜さんの投稿からのコピペだけど。。。)
# 機会があったらどっかで使おう。
ピンクの恐竜
常連さん
会議室デビュー日: 2005/02/01
投稿数: 42
投稿日時: 2005-09-03 21:09
返信ありがとうございます。

Heさんの処理で私のやりたい要件は実現できます。

今回の投稿はonbeforeunloadでは出来ないと私が思い込んで
onloadでの置き換え処理についてたずねたのですが、
そんな方法があったのですね。
全く思いついきませんでした。

私のやりたい要件を満たすのであれば
こちらの方が処理がすっきりしていて適切かも知れませんね。

ありがとうございます。

今回私の知らなかった処理がたくさん出てきて大変勉強になりました。
どうもありがとうございました。
kamui
会議室デビュー日: 2003/12/24
投稿数: 3
投稿日時: 2006-03-03 16:16
ボタンの連打制御に Heさんの処理を利用させてもらおうと思ったのですが、
画面によってはうまくいきません。
window.openを使って、サブウィンドウを開くボタンのある画面で、
サブウィンドウを開いたときに onbeforeunload イベントが発生し、
以後、ボタンクリックがブロックされてしまいます。

サブウィンドウを開くボタンのイベントでフラグを立てて区別すれば、
対応は可能なのですが、何かよい回避策はないでしょうか?

環境は、Windows2000(or WindowsXP)+IE6です。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-03-03 20:57
引用:

サブウィンドウを開いたときに onbeforeunload イベントが発生し、



再現しませんが...

コード:
<body onbeforeunload="alert('onbeforeunload');">
<input type="button" value="test.html" onclick="window.open('test.html', '_blank');return false;">
</body>

kamui
会議室デビュー日: 2003/12/24
投稿数: 3
投稿日時: 2006-03-06 16:34
引用:

再現しませんが...



下記のような方法でサブウィンドウを開いていました。
コード:
<body onbeforeunload="alert('onbeforeunload');">
<a href="window.open('test.html', '_blank');">open</a>
</body>



下記のような方法に変更することにより、onbeforeunload イベントは発生しなくなりました。
コード:
<body onbeforeunload="alert('onbeforeunload');">
<a href="#" onclick="window.open('test.html', '_blank');return false;">open</a>
</body>



まず、なぜ リンクのクリックで、onbeforeunload イベントが発生するのか疑うべきでした。
ヒントをどうもありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)