2013-09-23 31 views
2

我有几个选项卡,每次我选择一个选项卡时,表单被提交发送变量一个不同的值(从用户隐藏)。如果我从TAB1到TAB2说,变量99将得到2的值,TAB3的值为3,依此类推....问题我遇到的是当我选择TAB2时,我不希望页面恢复到TAB1。这里是我的代码:如何防止提交表单后恢复到以前的选项卡

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Submit a Form on Tab Click</title> 

<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" /> 
<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 


<style type="text/css"> 
</style> 

<script> 
$(function() { 
$("#Main").tabs(); 
$('[id^=ui-id-]').click(function(){ 
var tabId = $(this).attr('id'); 
var tabNum = tabId.split('-')[2]; 
$('#form-' + tabNum).submit(); 
}); 
}); 
</script> 


</head> 

<body> 



<div id="Main"> 
<ul> 
<li><a href="#Tab1">Tab1</a></li> 
<li><a href="#Tab2">Tab2</a></li> 
<li><a href="#Tab3">Tab3</a></li> 
<li><a href="#Tab4">Tab4</a></li> 
<li><a href="#Tab5">Tab5</a></li> 
<li><a href="#Tab6">Tab6</a></li> 
</ul> 

<form id="form-1" action="Tab_Click_v00.html" method="post"> 
<input type="hidden" name="Nb_var99" value="1"> 
</form> 

<form id="form-2" action="Tab_Click_v00.html" method="post"> 
<input type="hidden" name="Nb_var99" value="2"> 
</form> 

<form id="form-3" action="Tab_Click_v00.html" method="post"> 
<input type="hidden" name="Nb_var99" value="3"> 
</form> 

<form id="form-4" action="Tab_Click_v00.html" method="post"> 
<input type="hidden" name="Nb_var99" value="4"> 
</form> 

<form id="form-5" action="Tab_Click_v00.html" method="post"> 
<input type="hidden" name="Nb_var99" value="5"> 
</form> 

<form id="form-6" action="Tab_Click_v00.html" method="post"> 
<input type="hidden" name="Nb_var99" value="6"> 
</form> 

<div id="Tab1"> 
<p>Tab1</p> 
</div> 
<div id="Tab2"> 
<p>Tab2</p> 
</div> 
<div id="Tab3"> 
<p>Tab3</p> 
</div> 
<div id="Tab4"> 
<p>Tab4</p> 
</div> 
<div id="Tab5"> 
<p>Tab5</p> 
</div> 
<div id="Tab6"> 
<p>Tab6</p> 
</div> 
</div> 


</body> 
</html> 

这里是我的代码现在,我删除了一些东西,这并没有使自从:

<!DOCTYPE html> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Submit a Form on Tab Click</title> 

<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" /> 
<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 


<style type="text/css"> 
</style> 

<script> 
$(function() {//Open function 
$("#Main").tabs(); 
$('[id^=ui-id-]').click(function(){ //Open [id^=ui-id-] 

     if (tabId == 'ui-id-1') 
    { 
     doAjax('1'); 
     } 
    else if (tabId == 'ui-id-2') 
    { 
     doAjax('2'); 
    } 
    else if (tabId == 'ui-id-3') 
    { 
     doAjax('3'); 
    } 
function doAjaxSubmit(formID) { //Open doAjaxSubmin 
$.ajax({ 
    type: "POST", 
    url: "Tab_Click_v00.html", 
    data: "Nb_var99=" + formID, 
}) 
} //Close doAjaxSubmin 
}); //Close [id^=ui-id-] 
});//Close function 
</script> 


</head> 

<body> 



<div id="Main"> 
<ul> 
<li><a href="#Tab1">Tab1</a></li> 
<li><a href="#Tab2">Tab2</a></li> 
<li><a href="#Tab3">Tab3</a></li> 
<li><a href="#Tab4">Tab4</a></li> 
<li><a href="#Tab5">Tab5</a></li> 
<li><a href="#Tab6">Tab6</a></li> 
</ul> 



<div id="Tab1"> 
<p>Tab1</p> 
</div> 
<div id="Tab2"> 
<p>Tab2</p> 
</div> 
<div id="Tab3"> 
<p>Tab3</p> 
</div> 
<div id="Tab4"> 
<p>Tab4</p> 
</div> 
<div id="Tab5"> 
<p>Tab5</p> 
</div> 
<div id="Tab6"> 
<p>Tab6</p> 
</div> 
</div> 


</body> 
</html> 

这是行不通的。它也杀死了CSS风格?我会继续尝试。

+0

你介意编辑你的问题,并告诉我们一些关于Nb_var99数据到达'Tab_Click_v00.html'时会发生什么?是否有用户需要做的事情(也就是说,用户是否需要查看该页面?),或者数据(Nb_var99 == 3,Nb_var99 == 4等)到达该HTML文件后会发生什么?此外,你的服务器做PHP或ASP.NET或? (如果我们需要添加一些服务器端代码来完成答案?) – gibberish

+0

此外,在将Nb_var99值置于“Tab_Click_v00.html”之后,是否要更新当前页面 - 可能是使用成功的消息,或者通过显示由Tab_Click页面发回的数据(为此,我们需要知道PHP/ASP.NET的问题......这非常简单,我们只需要知道) – gibberish

+0

嗨,gibberish,Nb_var99是一个包含在嵌入式网络服务器中的变量(这个网络服务器不行,或者至少我不知道它运行的是PHP或ASP.NET)。据我所知,它运行一个名为PINK的软件(由Netburner开发)。不幸的是,向其变量加载值的方式是在表单上执行一个帖子。他们不需要提醒用户这个动作,另一个嵌入式单元会收集这些信息作为参考,以知道用户目前在哪里。 –

回答

1

这是一个新的答案,请试试这个。

此答案也使用AJAX。我将发布另一个示例,解决您的请求,提供有关隐藏iframe理念的更多信息。

请注意,当您从Tab到Tab单击时,用户仍然在选项卡上。

只需复制/粘贴到两个文件:
的index.php(或任何你想将它命名),以及
myphpprocessor。PHP(如果该文件的名称改变,也必须改变其在AJAX代码块

的index.php名称(或mytest.html,或其他)

<html> 
<head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script> 
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css" /> 

    <style> 
     #msg{width:30%;height:80px;padding:10px;margin-top:20px;background-color:wheat;} 
     .hidden{display:none;} 
    </style> 

     <script type="text/javascript"> 
      $(document).ready(function() { 

       $("#Main").tabs(); 

       $('[id^=ui-id-]').click(function() { 
        var tabId = $(this).attr('id'); 

        if (tabId == 'ui-id-1') { 
         doAjax('1'); 
        }else if (tabId == 'ui-id-2') { 
         doAjax('2'); 
        }else if (tabId == 'ui-id-3') { 
         doAjax('3'); 
        }else if (tabId == 'ui-id-4') { 
         doAjax('4'); 
        }else if (tabId == 'ui-id-5') { 
         doAjax('5'); 
        } 

       }); //END ui-id-#.click fn 
      }); //END document.ready 

      function doAjax(formID) { 
       $.ajax({ 
        type: "POST", 
        url: "myphpprocessor.php", 
        data: "Nb_var99=" + formID, 
       }) 
       .done(function(recd_from_PHP) { 
        //No need to put ANYTHING in here, but for eg, you can do: 
        //alert('In done fn...'); 

        //AS AN EXAMPLE ONLY, display message sent from server side 
        //alert("PHP side said: " + recd_from_PHP); 
        $('#msg').html('<h2>Here is what the PHP side sent:</h2>' + recd_from_PHP); 

        //AS AN EXAMPLE ONLY, click the third tab... 
        //$('[id^=ui-id-3]').click(); //Warning, this will cause endless loop -- but just demonstrating 
       }); 

      } 
     </script> 
    </head> 
<body> 

    <div id="Main"> 
     <ul> 
      <li><a href="#Tab1">Tab1</a></li> 
      <li><a href="#Tab2">Tab2</a></li> 
      <li><a href="#Tab3">Tab3</a></li> 
      <li><a href="#Tab4">Tab4</a></li> 
      <li><a href="#Tab5">Tab5</a></li> 
      <li><a href="#Tab6">Tab6</a></li> 
     </ul> 

     <form id="form-1" action="Tab_Click_v00.html" method="post"> 
      <input type="hidden" name="Nb_var99" value="1"> 
     </form> 

     <form id="form-2" action="Tab_Click_v00.html" method="post"> 
      <input type="hidden" name="Nb_var99" value="2"> 
     </form> 

     <form id="form-3" action="Tab_Click_v00.html" method="post"> 
      <input type="hidden" name="Nb_var99" value="3"> 
     </form> 

     <form id="form-4" action="Tab_Click_v00.html" method="post"> 
      <input type="hidden" name="Nb_var99" value="4"> 
     </form> 

     <form id="form-5" action="Tab_Click_v00.html" method="post"> 
      <input type="hidden" name="Nb_var99" value="5"> 
     </form> 

     <form id="form-6" action="Tab_Click_v00.html" method="post"> 
      <input type="hidden" name="Nb_var99" value="6"> 
     </form> 

     <div id="Tab1"> 
      <p>Tab1</p> 
     </div> 
     <div id="Tab2"> 
      <p>Tab2</p> 
     </div> 
     <div id="Tab3"> 
      <p>Tab3</p> 
     </div> 
     <div id="Tab4"> 
      <p>Tab4</p> 
     </div> 
     <div id="Tab5"> 
      <p>Tab5</p> 
     </div> 
     <div id="Tab6"> 
      <p>Tab6</p> 
     </div> 
    </div> 

    <div id="msg"></div> 

</body> 
</html> 

服务器端:myphpprocessor。 PHP(以.php必须结束)

<?php 

    $id = $_POST['Nb_var99']; 

    if ($id == 4) { 
     $msg = "Return of the Tab Four"; 
    }else{ 
     $msg = 'PHP side receieved: ' .$id; 
    } 

    echo $msg; 

往常一样,请给予好评是对您有帮助的任何答案,选择一个正确的答案,关闭疑问句一度满意。

1

由于您使用的jQuery Tabs控制,你可以使用window.location.hash和(使用active选项,并显示相应的选项卡)绑定到load事件:

$(window).load(function(){ 
    if(window.location.hash){ 
    $('#main').tabs('option','active',window.location.hash.substring(1)); 
    } 
}); 

然后将用户重定向回用somepage.html#tabindex

2

对于您想要做的事情,根本不需要使用<form> s和<input> s。

仅基于点击的标签,您可以通过AJAX将1或2或3发送到所需的HTML页面。

<form>结构是非常棒的,当你有几个领域,你希望将他们的数据发布到另一个服务器页面进行处理。然而,就你而言,你似乎只希望发送一个值到另一个页面,然后返回。

下面是做到这一点的一种方式,使用AJAX:

$(document).ready(function() { 
    $("#Main").tabs(); 

    $('[id^=ui-id-]').click(function() { 

     if (tabId == 'ui-id-1') { 
      doAjax('1'); 
     }else if (tabId == 'ui-id-2') { 
      doAjax('2'); 
     }else if (tabId == 'ui-id-3') { 
      doAjax('3'); 
     } 

    }); //END ui-id-#.click fn 
}); //END document.ready 

function doAjaxSubmit(formID) { 
    $.ajax({ 
     type: "POST", 
     url: "myphpprocessor.php", 
     data: "Nb_var99=" + formID, 
    }) 
    .done(function(recd_from_PHP) { 
     //No need to put ANYTHING in here, but for eg, you can do: 

     //AS AN EXAMPLE ONLY, display message sent from server side 
     alert("PHP side said: " + recd_from_PHP); 

     //AS AN EXAMPLE ONLY, click the third tab... 
     $('[id^=ui-id-3]').click(); 
    }); 

} 

另一种方式来发送表单数据(使用<form>因为它的目的)是创建网页上隐藏的,包含其中的Tab_Click_v00.html页面 - 然后POST到该页面。

因为表单的目标已经在的页面上,所以当前页面不应该刷新。由于隐藏,用户不应该看到任何异常。

+0

嗨Gibberish,我感兴趣的隐藏信息