2017-02-15 92 views
1

當我點擊添加的幾個新按鈕時,發生了一些奇怪的事情。他們工作正常,但他們繼續滾動頁面回到屏幕的頂部。我認爲我的代碼中有其他東西導致它,因爲我確實在其他地方有這種行爲,但我無法弄清楚什麼是干擾(我的代碼在這一點上是非常大的)。Firefox/Javascript - 跟蹤點擊按鈕時發生了什麼

當我點擊我的按鈕時,計算出發生了什麼的最簡單方法是什麼?我知道F12調試器的基礎知識,但除此之外,我有點無知。我讀過關於事件處理程序等的內容,但從未使用它們,所以希望有一種更簡單的方法來追蹤這種情況。

下面是按鈕代碼。它看起來很好,它做它應該做的事情,但也有不必要的行爲。

$(document).on('click', '.friendly_submit', function() { 
    // Work out our team ID. 
    var OurTeamIDF = $('div').find('[data-ourteamid]'); 
    var OurTeamID = OurTeamIDF.data('ourteamid'); 
    var OpponentID = $(this).closest('form') 
          .find('.friendly_opponent') 
          .find(':selected').attr('data-OpponentID'); 
    var Venue = $(this).closest('form') 
         .find('.friendly_venue') 
         .find(':selected').text(); 
    var WhichFriendly = $(this).closest('form').attr('data-WhichFriendly'); 

    $.post('scripts/randomfriendly.php', 
      { 
       OurTeamID : OurTeamID, 
       OpponentID : OpponentID, 
       Venue : Venue, 
       WhichFriendly : WhichFriendly 
      }, 
      function (data) { 
       console.log(data); 
      } 
    ) 
}); 

而且HTML代碼如下。

echo "<form data-WhichFriendly = 0 class = 'box_center center'>"; 
    echo "<fieldset class = 'random_friendly_fieldset box_center'>"; 
     echo "<legend>Random Friendly</legend>"; 
     //echo "<p class = 'bold center underline'>Choose Opponent</p>"; 

     echo "Choose Opponent : <select class = 'friendly_opponent'>"; 
      foreach ($AllTeamsArray as $Team) { 
       // Don't include ourselves in the list. 
       if (trim($Team['Name']) <> trim($OurTeamName)) { 
        $TeamID = $Team['ID']; 
        echo "<option data-OpponentID = $TeamID>" . $Team['Name'] . " (" . $Team['League'] . ")</option>"; 
       } 
      } 
     echo "</select></br></br>"; 

     echo "Venue : <select class = 'friendly_venue'>"; 
      echo "<option>Neutral</option>"; 
      echo "<option>Home</option>"; 
      echo "<option>Away</option>"; 
     echo "</select></br></br>"; 

     echo "<button class = 'friendly_submit'>Submit</button>"; 
    echo "</fieldset>"; 
echo "</form>"; 
+0

您需要在點擊處理程序中返回false – juvian

+0

您能告訴我們您的代碼嗎?如果我們能看到你是如何設置它,它會容易得多嗎? – talemyn

+1

添加了按鈕代碼。 – Farflame

回答

2

有跡象表明,跳到我的腦海兩件事情:

1)按鈕type="submit"並提交表單(這將導致頁面刷新)

2)按鈕鏈接被設置爲href="#'

編輯

現在你甲肝e發佈了你的代碼,我正在更新我的答案。

更改您的代碼,以便在窗體上捕獲提交事件而不是捕獲按鈕上的單擊事件。

$("#add-form-id-here").submit(function(event) { 
    event.preventDefault(); 

    //change your handler so you get the correct values etc here. 
}); 

然後確保你添加一個type="submit"到你的按鈕。

+0

我不這麼直接認爲,儘管按鈕位於表單內,所以也許這是問題的一部分。 href ='#'也可能是相關的,因爲我在主頁頂部有這種行爲,可以滾動回標題欄來幫助導航。它在這裏(滾動到標題欄),所以它可以很好地鏈接。但我不確定這段代碼如何或爲什麼會與那個代碼鏈接。 – Farflame

+0

@Farflame如果按鈕是一種形式,並且他們有'''type =「submit」''',那麼他們會在按下時提交表單並刷新頁面。爲了防止這種情況,可以將event.preventDefault()添加到事件處理函數中。 – Sean

+0

上面添加了HTML。我沒有指定type ='submit',但如果這是默認行爲,那麼這可能是問題?如果是這樣,我如何從默認值更改它? – Farflame

1

嘗試添加此:

event.preventDefault();

event.stopPropagation();

$(document).on('click', '.friendly_submit', 
    function() { 

     // Work out our team ID. 
     var OurTeamIDF = $('div').find('[data-ourteamid]'); 
     var OurTeamID = OurTeamIDF.data('ourteamid'); 
     var OpponentID = $(this).closest('form').find('.friendly_opponent').find(':selected').attr('data-OpponentID'); 
     var Venue = $(this).closest('form').find('.friendly_venue').find(':selected').text(); 
     var WhichFriendly = $(this).closest('form').attr('data-WhichFriendly'); 

     event.preventDefault(); 
     event.stopPropagation(); 

     $.post('scripts/randomfriendly.php', 
      { 
       OurTeamID : OurTeamID, 
       OpponentID : OpponentID, 
       Venue : Venue, 
       WhichFriendly : WhichFriendly 
      } , 
     function (data) { 
      console.log(data); 
     }) 


}); 
+0

我會在哪裏添加? – Farflame

+0

檢查編輯,告訴我它是否工作! – Bitito

+0

我認爲那是問題。看到肖恩的另一個答案。表單正在提交,這是問題所在。因爲我不需要它並用我自己的div來替換它,所以我完全刪除了這個表單。但是,是的,這是問題:) – Farflame

相關問題