2013-09-23 64 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,我感興趣的隱藏信息