0

Fancybox について深刻な問題があります。画像ギャラリーのあるウェブサイトを持っています。画像に悪用データがある場合、ユーザーは画像を報告できます。

現在、Fancybox を使用してレポート フォームを表示しています。jQuery で入力フィールドを検証し、AJAX でデータを送信します。スクリプトは親ページにあります。

<a href="linktothereportform?id=5" class="report fancybox.ajax" rel="nofollow" style="color:#CC0033;">report</a>

これは完全に機能します。ただし、ユーザーが新しいタブまたは新しいウィンドウでリンクを開くと、検証スクリプトがレポート フォームにないため、問題が発生します。それらは親ページにあります。

右クリックまたはマウススクロールのクリックを停止する方法はありますか、またはこの問題をどのように克服しますか?

ありがとう

4

5 に答える 5

3

もう1つのオプションは、セレクターをクリックしたときにすべてのマウスボタン(左、右、ホイール)をキャッチし、次の.reportような場合はファンシーボックスをトリガーすることです。

$(document).ready(function () {
    $(".report").on('mousedown', function (e) {
        if (e.which == 1 || e.which == 3 || e.which == 2) {
            e.preventDefault();
            $(this).fancybox({
                // API options
            }).click();
        }
        return false;
    });
    $(document).on('contextmenu', function (e) {
        e.preventDefault();
    });
});

JSFIDDLEを参照して、サムネイル上でマウスボタンを試してください。

.on()jQuery1.7以降が必要です

于 2013-03-22T06:36:13.120 に答える
2

divまたはinput.button要素の関数呼び出しを介してfancyboxを呼び出すことができます

<input type="button" value="click here" class="fake-fancy" data-href="linktothereportform?id=5">

<span class="fake-fancy" data-href="linktothereportform?id=5">Report</span>

<script type="text/javascript">
  jQuery('.fake-fancy').click(function(){
    jQuery.fancybox.open({
      href: jQuery(this).attr('data-href'),
      type: 'ajax'
    });
  });
</script>
于 2013-03-22T03:56:40.843 に答える
1

このようなリンクをすべてボタンに置​​き換えることで、右クリックと中クリックのオプションを無効にすることができます。

すなわち

$('a.report').replaceWith('<button onclick="window.location.href=\'linktothereportform?id=5\'">report</button>');

上記を少し調整する必要があるかもしれません。さらに、リンクなどのようにボタンのスタイルを設定する必要がありますが、一般的な考え方は、すべての「新しいウィンドウで開く」を無効にしながら、「同じウィンドウで開く」機能を取得することです。可能性。

于 2013-03-22T03:57:26.020 に答える
0

これを、ユーザーが新しいタブで開くことを許可しない にlink置き換えることができます。buttonあなたはこのようにすることができます:

<button onclick="window.location='linktothereportform?id=5';" class="report fancybox.ajax" style="color:#CC0033;">report</button>
于 2013-03-22T05:03:24.093 に答える
0

私の質問に対して正しい貴重な回答をしてくれた人々に、すべての功績が認められるべきです。

将来この質問の答えを求める人のために、良い答えを作ることにしました。

私は基本的に私の答えを2つのセクションに分けます。

私の最初の質問に関しては、ハイパーリンクを使用した解決策が必要でした。

最初の方法はハイパーリンクです

@Jeemusuのコメントとして。

Fancybox は AJAX を使用してコンテンツをロードします。と呼ばれる HTTP 変数セットがあります。これは 、AJAX 要求の場合にHTTP_X_REQUESTED_WITH設定され、設定されます。'xmlhttprequest'

そのため、誰かがリンクを新しいタブで開いても、それが であるかどうかを確認AJAXnon-AJAX、それに応じてコンテンツを表示できます。したがって、右クリックの心配はありません。

<?php
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
//this is an ajax request. do what you need to 
}
else {
    //this is non ajax. do what you need
}
?>

2 番目のオプションは、ハイパーリンクをボタンまたは任意の div として変更することです。

一般的な考え方は、すべての可能性'open-in-same-window'を無効にしながら機能を取得することです。'open-in-new-window'

@Scuzzyと@techfoobarの回答として

<input type="button" value="click here" class="fake-fancy" data-href="linktothereportform?id=5">

<span class="fake-fancy" data-href="linktothereportform?id=5">Report</span>

<script type="text/javascript">
  jQuery('.fake-fancy').click(function(){
    jQuery.fancybox.open({
      href: jQuery(this).attr('data-href'),
      type: 'ajax'
    });
  });
</script>

また

jQuery('a.report').each(function(){jQuery(this).replaceWith('<button onclick="window.location.href=\'' + jQuery(this).attr('href') + '\'">report</button>');});
于 2013-03-22T04:56:37.167 に答える