【问题标题】:Firefox / Javascript - Track what's happening when my button is clickedFirefox / Javascript - 跟踪单击我的按钮时发生的情况
【发布时间】:2017-02-15 17:25:45
【问题描述】:

当我单击添加的几个新按钮时,发生了一些奇怪的事情。他们工作正常,但他们不断将页面滚动回屏幕顶部。我认为我的代码中的其他东西导致了它,因为我在其他地方确实有这种行为,但我无法弄清楚是什么造成了干扰(此时我的代码非常大)。

了解单击按钮时发生的情况的最简单方法是什么?我知道 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>";

【问题讨论】:

  • 您需要在点击处理程序中返回 false
  • 你能告诉我们你的代码吗?如果我们能看到您是如何设置的,那么提供帮助会容易得多?
  • 添加了按钮代码。
  • "code" 也暗示了按钮的 html。否则只是猜测会很方便。
  • 抱歉,还添加了 HTML。

标签: javascript jquery events event-handling


【解决方案1】:

我想到了两件事:

1) 按钮为type="submit",正在提交表单(导致页面刷新)

2) 按钮是设置为href="#' 的链接

编辑

既然你已经发布了你的代码,我正在更新我的答案。

更改您的代码,以便捕获表单上的提交事件,而不是捕获按钮上的单击事件。

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

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

然后确保将type="submit" 添加到您的按钮。

【讨论】:

  • 我不这么认为,虽然按钮在一个表单中,所以也许这是问题的一部分。 href='#' 也可能是相关的,因为我的主页顶部确实有这种行为,可以滚动回标题栏以帮助导航。它在此处执行此操作(滚动到标题栏),因此可以很好地链接。但我不确定这段代码如何或为什么会与那个链接。
  • @Farflame 如果按钮在表单中并且它们有type="submit",那么它们将在按下时提交表单并刷新页面。为防止这种情况发生,请将event.preventDefault() 添加到您的事件处理程序中。
  • HTML 是在上面添加的。我没有指定 type='submit',但如果这是默认行为,那可能是问题所在?如果是,我如何将其更改为默认值?
  • 尝试添加 event.preventDefault(); ,但它仍在发生。我仍然认为它以某种方式调用了我原来的 href 锚点。它肯定是那样做的。
  • type="submit" 添加到按钮,然后将event.preventDefault() 添加到事件处理程序,看看它们是否都修复了它。该按钮未链接到锚点,因此我看不到它们之间的链接
【解决方案2】:

尝试添加这个:

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);
        })


});

【讨论】:

  • 我应该在哪里添加?
  • 我认为这是问题所在。请参阅肖恩的另一个答案。表单正在提交,这就是问题所在。我完全删除了表单,因为我不需要它并用我自己的 div 替换它。但是,是的,这就是问题所在:)
  • 不错!阅读 preventDefault() 和 stopPropagation(),他们是好朋友!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多