【问题标题】:Button onclick refreshing page按钮onclick刷新页面
【发布时间】:2015-08-01 23:20:04
【问题描述】:

我有一个样式像按钮的 div:

    <form class="ui form segment" name="form" id="myForm" method="POST" style="max-width:950px;">

        <!-- Some fields omitted -->

        <!-- Normal button that has onclick event attached --> 
        <div class="ui blue submit button" id="applyButton" style="width:150px" name="apply">Update</div>


  <!-- 2 submit buttons -->

  <input type ="submit" class="ui blue submit button" id="publish" value = "Publish" style="width:150px" name="publish" onclick="submitForm('/write/submitWork'); this.disabled=true; this.className += ' disabled'; this.value='Sending…'; "/>

  <input class="ui orange submit button" id="saveasdraft" value ="Save as draft" style="width:160px" name="saveasdraft" onclick="submitForm('/write/submitWork'); this.disabled=true; this.className += ' disabled'; this.value='Sending…'; "/>

    </form>

这里是submitForm() 函数,它根据传入的操作提交表单:

function submitForm(action)
    {
        document.getElementById('myForm').action = action;
        document.getElementById('myForm').submit();
    }

我附加了一个 onclick 事件,它从 ajax 请求中获取一些数据并将其打印在屏幕上:

$(document).on('click', '#applyButton', function (e) {

    e.preventDefault();
    // for each input radio button
    $('input[type=radio]').each(function () {
        // if the radio button is checked
        if ($(this).is(":checked")) {
            if (!$("#characterList div:contains(" + $(this).val() + ")").length) {
                $('#characterList').append('<div class="ui card"><div class="content"> <div class="header">' + $(this).val() + '</div><div class="description"><p>' + getCharacterData($(this).val()) + '</p></div></div></div>');
            }
        } else {
            $("#characterList div:contains(" + $(this).val() + ")").remove();

        }

    });
});

问题在于它会刷新页面,有时就像表单的提交按钮一样。我不希望它这样做。

这是一个link 的一个活生生的例子。 (点击字符部分的蓝色“更新”按钮)

编辑:

该链接要求用户登录,因此您可以使用我制作的这个测试登录:

邮箱:test@hotmail.com

密码:Testuser1

这里还有进行 AJAX 调用的 getCharacterData() 函数:

function getCharacterData(subject)
        {
        $.ajax({
                url: '/profile/getCharacterTripleData',
                type: 'GET',
                async: false,
                data: { field1: subject},
                success: function (data) {
                //your success code
                response = data;
                },
                error: function (xhr, ajaxOptions, thrownError) {
                //alert("Error: " + thrownError);
             }

            });

            return response;

        }

【问题讨论】:

  • 您提供的链接中没有任何更新按钮。此外,&lt;div&gt; 标签没有name 属性。你的 ajax 调用在哪里?
  • 你能告诉我们getCharacterData函数的内容吗?
  • @D4V1D 抱歉忘记您需要登录才能访问该页面。请参阅更新
  • 你能不能展示你周围的 HTML div,因为你说的是​​某种形式?此外,我认为你不能像以前那样返回响应,而是必须在你的成功函数中调用一个函数(例如,receivedResult(data),在这个函数中你可以用data做任何你喜欢的事情(记住, ajax 调用的全部意义在于您“稍后”得到结果并且不能直接返回它)。
  • @stef77 这是我的 div 之前的表格 &lt;form class="ui form segment" name="form" id="myForm" method="POST" style="max-width:950px;"&gt;

标签: jquery html button


【解决方案1】:

我不知道您使用的是什么 JavaScript 框架。但是您真正的源代码包含&lt;input class="ui blue submit button" id="applyButton" value = "Update" style="width:150px" name="apply"/&gt;,而不是您声称的&lt;div class="ui blue submit button" id="applyButton" style="width:150px" name="apply"&gt;Update&lt;/div&gt;。也许有一些 JavaScript 为每个输入标签添加了一个表单提交,我不知道,JavaScript 太大而无法调试。

将其更改为 &lt;div&gt;,正如您在帖子中所描述的那样,也许这会起作用。

编辑:或者/另外,您的框架中可能存在一些代码,这些代码会在类提交或按钮上触发。删除这些类,然后重试。

【讨论】:

  • 是的,你是对的,来源与我发布的不同,但只是略有不同,因为我在本地服务器上进行测试。已经更新了,你可以检查一下,还是有同样的问题。
  • 扔掉div中的css类。现在会发生什么?
  • 啊,这似乎已经修复了,我删除了 .submit 类,现在它没有刷新。当按下带有.submit 类的按钮时,必须有一些后端行为提交表单。我正在使用语义 UI 框架,所以很多东西都在引擎盖下。谢谢
  • 很高兴为您提供帮助。请接受这个带有绿色复选标记的答案 - 问题已结束,声望提升,对每个人都有好处。
  • 我愿意,但您的回答不是解决方案,您的评论才是。人们会假设将其更改为 div 可以解决问题,但事实并非如此。如果你编辑你的答案并提出一些关于删除 css 类的内容,我会接受它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 2013-04-03
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多