2014-04-08 59 views
1

我目前使用javascript来防止链接在每次用户点击时在多个浏览器选项卡上打开。假设我的链接目标是谷歌,它会创建一个新标签(如果不存在),但会在相同目标存在时刷新。迄今为止效果很好。PHP:表单阻止多个选项卡。

这是代码。

链接

<div id="container"> 
<a href="https://www.google.com" target="_blank">Google</a> 
</div> 

的JavaScript

<script> 
    document.getElementById("container").onclick = function(test){ 
     if (test.target.tagName === "A") 
      window.open(test.target.href, test.target.href); 

     return false; 
    } 
</script> 

我的问题是,我如何使用相同的JavaScript我的形式类似的效果吗?我的意思是如果用户提交我的表单。如果不存在,它将在提交时创建一个新选项卡。但是如果选项卡存在,请在相同的选项卡上重新提交。我试图改变JavaScript,但不能使它作为正常链接工作。

这里是我的形式

<form name='form1' action='/newform.php' method='post' target='_blank'> 
<input type='hidden' name='test' value=''> 
<input type='image' src='../data/images/myimages.gif' width='100px' height='30px' alt=''> 
</form> 
+0

你不能,不是那样的。不同之处在于,首先使用'window.open',而另一个则使用'target = _blank'。在第二个你没有选项卡的控制。 –

+0

我不明白,先生。因为我也在我的链接上使用target = _blank。无法弄清楚为什么我的表单不断创建具有相同网址的新标签时提交而不是1.不像我的链接,只创建1个选项卡。 –

+0

Your link = _blank on your link does not effect,because your window.open in your javascript and open the window like that。如果从链接中删除target = _blank,它也会起作用,因为它不是打开选项卡的链接,而是脚本。 –

回答

0

您可以尝试这样的事:

<script type='text/javascript'> 
    function formSubmit() { 
     window.open("about:blank","newWindow"); 
    } 
</script> 
<form name='form1' action='/newform.php' method='post' onSubmit='formSubmit()' target='newWindow'> 
    <input type='hidden' name='test' value=''> 
    <input type='image' src='../data/images/myimages.gif' width='100px' height='30px' alt=''> 
</form> 

基本上,这将在第一次提交表单时打开新窗口,而其他时间表单将提交到已经打开的窗口。

请记住,window.open可以被弹出式窗口拦截器阻止,通常是。

+0

对不起,迟交回复先生,我只是测试它,你的代码完全按照我的要求。我有2个新手问题。 1)window.open(“about:blank”,“newWindow”]中的“newWindow”是否可以重命名为其他类型?2)如上所述,window.open可以被弹出窗口阻止程序阻止,它是否仍然与target一样= _blank或不同的方法? –

0

如何使用会话变量?
也使用ID的JavaScript。

<?php 
    //Check if session has not been started. 
    if (session_status() == PHP_SESSION_NONE) 
    { 
    session_start(); 
    } 


//If it has not been set, set no default. 
if (!ISSET($_SESSION['hasSubmit']) 
{ 
    $_SESSION['hasSubmit'] = "no"; 
} 

if ($_SESSION['hasSubmit'] == "no") 
{ 
    //Execute code for no 
    echo " 
    <form name='form1' id='firstSubmit' action='/newform.php' method='post' target='_blank'> 
    <input type='hidden' name='test' value=''> 
    <input type='image' src='../data/images/myimages.gif' width='100px' height='30px' alt=''> 
    </form>"; 
} 
else if($_SESSION['hasSubmit'] == "yes") 
{ 
    //Execute code for yes 
    //Edit your form properties here to your likes. 
    echo " 
    <form name='form1' action='#' method='post' target='_newblank'> 
    <input type='hidden' name='test' value=''> 
    <input type='image' src='../data/images/myimages.gif' width='100px' height='30px' alt=''> 
    </form>"; 
} 
?> 
在newform.php集

$_SESSION['hasSubmit'] = 'yes' 

现在的javascript:

$('firstSubmit').click(function(){ 
location.reload; 
}); 

这应该做的伎俩

+0

它会创建更多的标签吗?假设我有标签1与form.php并提交它会使用newform.php创建标签2如果我回到标签1并重新提交,它会使用newform.php创建标签3? –

+0

要解决此问题,请在javascript中创建onclick处理程序,执行location.reload(); I将编辑我的回答你的问题 –