Php 如何阻止fancybox超链接在新选项卡或窗口中打开?

Php 如何阻止fancybox超链接在新选项卡或窗口中打开?,php,jquery,fancybox,Php,Jquery,Fancybox,我对Fancybox有一个严重的问题。我有一个带有图片库的网站。如果图像上存在任何滥用数据,用户可以报告图像 目前,我正在使用Fancybox显示报告表单。我用jQuery验证输入字段,用AJAX提交数据,脚本在父页面上 这很好用。但是,如果用户在“新建”选项卡或“新建”窗口中打开链接,则会出现问题,因为验证脚本不在报告表单上。这些都在父页面上 那么,有没有办法停止右键单击或单击鼠标滚动,或者如何克服这个问题 谢谢您可以通过对div或input.button元素的函数调用调用fancybox

我对Fancybox有一个严重的问题。我有一个带有图片库的网站。如果图像上存在任何滥用数据,用户可以报告图像

目前,我正在使用Fancybox显示报告表单。我用jQuery验证输入字段,用AJAX提交数据,脚本在父页面上

这很好用。但是,如果用户在“新建”选项卡或“新建”窗口中打开链接,则会出现问题,因为验证脚本不在报告表单上。这些都在父页面上

那么,有没有办法停止右键单击或单击鼠标滚动,或者如何克服这个问题


谢谢

您可以通过对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>

报告
jQuery('.false')。单击(函数(){
jQuery.fancybox.open({
href:jQuery(this.attr('data-href'),
键入:“ajax”
});
});

您可以通过对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>

报告
jQuery('.false')。单击(函数(){
jQuery.fancybox.open({
href:jQuery(this.attr('data-href'),
键入:“ajax”
});
});

您可以将所有此类链接替换为按钮,从而使右键单击和中键单击选项无效

i、 e

$('a.report')。替换为('report');

您可能需要对上述内容稍作调整,并将按钮样式设置为链接等。但总体思路是在取消所有“在新窗口中打开”选项的同时,获得“在同一窗口中打开”功能。

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

i、 e

$('a.report')。替换为('report');

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

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

我决定给那些将来会为这个问题寻找答案的人一个好答案

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

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

所以第一种方法是超链接

正如@Jeemusu的评论

Fancybox使用AJAX加载内容。有一个名为
HTTP\u X\u REQUESTED\u的HTTP变量集,带有
,如果是AJAX请求,它将被设置并设置为
'xmlhttprequest'

因此,即使有人在新选项卡中打开链接,我们也可以检查它是
AJAX
还是
非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
}
?>

jQuery('a.report').each(function(){jQuery(this).replaceWith('<button onclick="window.location.href=\'' + jQuery(this).attr('href') + '\'">report</button>');});
jQuery('a.report').each(function(){jQuery(this.replacetwith('report');});

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

我决定给那些将来会为这个问题寻找答案的人一个好答案

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

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

所以第一种方法是超链接

正如@Jeemusu的评论

Fancybox使用AJAX加载内容。有一个名为
HTTP\u X\u REQUESTED\u的HTTP变量集,带有
,如果是AJAX请求,它将被设置并设置为
'xmlhttprequest'

因此,即使有人在新选项卡中打开链接,我们也可以检查它是
AJAX
还是
非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
}
?>

jQuery('a.report').each(function(){jQuery(this).replaceWith('<button onclick="window.location.href=\'' + jQuery(this).attr('href') + '\'">report</button>');});
jQuery('a.report').each(function(){jQuery(this.replacetwith('report');});

您可以用
按钮替换该
链接
,该按钮不允许用户在新选项卡中打开该链接。您可以这样做:

<button onclick="window.location='linktothereportform?id=5';" class="report fancybox.ajax" style="color:#CC0033;">report</button>
报告

您可以用
按钮替换该
链接
,该按钮不允许用户在新选项卡中打开该链接。您可以这样做:

<button onclick="window.location='linktothereportform?id=5';" class="report fancybox.ajax" style="color:#CC0033;">report</button>
报告

另一个选项是在单击选择器时捕捉所有鼠标按钮(左、右和滚轮)。报告
并触发fancybox(如有):

请参见,然后在缩略图上尝试任何鼠标按钮


注意
.on()
需要jQuery 1.7+

另一个选项是在单击选择器时捕捉所有鼠标按钮(左、右和方向盘)。报告
并触发fancybox(如果有):

请参见,然后在缩略图上尝试任何鼠标按钮


注意
.on()
需要jQuery 1.7+

您能在div或button元素上使用onclick事件并通过函数调用手动调用fancybox吗?@Scuzzy抱歉,朋友,我没听清楚。由于fancybox通过ajax请求表单,您可以检查
$\u服务器['HTTP\u X\u REQUESTED\u WITH']
variable查看页面是否是通过ajax请求的,如果不是,则阻止其显示表单。@vinu请查看我的答案以获得有效解释。@Jeemusu oops有意义。:)我会尝试让您知道我的朋友。感谢您在div或button元素上使用onclick事件,并通过函数调用手动调用fancybox?@Scuzzy抱歉,朋友,我没有收到您的消息。由于fancybox通过ajax请求表单,您可以检查
$\u服务器['HTTP\u X\u REQUESTED\u WITH']
变量,查看页面是否是通过ajax请求的,如果不阻止它显示表单。@vinu请查看我的答案以获得有效的解释。@Jeemusu Oops有道理。:)我会尝试让你知道我的朋友。thanksokay想到了这个主意。至于你的答案,对于动态id的jQuery('a.report')。each(function(){jQuery(th