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

另一种选择是在单击选择器时捕获所有鼠标按钮(左、右和滚轮).report并触发fancybox(如果有的话):

$(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()需要 jQuery 1.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

您可以通过用按钮替换所有此类链接来取消右键单击和中间单击选项。

IE

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

您可能需要对上述内容进行一些调整,并将按钮样式设置为看起来像链接等,但总体思路是获得“在同一窗口中打开”功能,同时取消所有“在新窗口中打开”可能性。

于 2013-03-22T03:57:26.020 回答
0

所有的功劳都应该归功于那些为我的问题提供正确有价值答案的人。

我决定为将来寻求这个问题答案的人做一个很好的答案。

我基本上会将我的答案分为两部分。

至于我最初的问题,我需要一个带有超链接的解决方案。

所以第一种方法是超链接

正如@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
}
?>

第二个选项是将超链接更改为按钮或任何 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 回答
0

您可以将其替换linkbutton不会让用户在新选项卡中打开它。你可以这样做:

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