2017-02-15 90 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