单选按钮触发 Ajax 调用 onClick

Radio button to trigger Ajax call onClick

我有一份调查表。这是 17 multiple-choice 个问题。我想使用 Ajax 来保存答案并在用户进行时报告分数。即:当用户 select 单选按钮 select 一个问题的答案时,它会在数据库中创建或更新该问题的答案,计算所有答案的分数并显示在 div 在屏幕上。单击提交按钮时,一切正常。

这是表单代码

    @using (Ajax.BeginForm(
        new AjaxOptions
        {
            HttpMethod="post",
            InsertionMode=InsertionMode.Replace,
            UpdateTargetId="currentScore"
        }
        ))
    { ... }

每个问题都有 5 个答案链接到来自数据库 table 的答案 ID。我编写代码将答案添加到数据库并在提交表单时更新 on-screen 分数,一切正常 当我单击提交按钮时 ,但我希望每次单击特定答案的单选按钮时都会发生这种情况。

我为此所做的尝试:

在我添加的单选按钮上:onclick="this.form.submit()"


结果:

表单提交,就好像它不是 Ajax 表单一样,而是像普通表单一样,并且页面重新加载。

我页面上有如下js:

<script src="/Scripts/jquery-1.10.2.js"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="/Scripts/jquery-1.10.2.min.js"></script>
<script src="/Scripts/jquery-ui-1.10.3.js"></script>
<script src="/Scripts/modernizr-2.6.2.js"></script>

这里是控制器header(按要求)

using System;
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Threading.Tasks; 
using System.Net; 
using System.Web; 
using System.Web.Mvc; 
using PROJECTNAME.Models; 

namespace PROJECTNAME.Controllers { 

public class QuestionsController : Controller
{
...

js 在一个包中:

    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                "~/Scripts/jquery-{version}.js",
                "~/Scripts/jquery.unobtrusive*",
                "~/Scripts/jquery.validate*"));

在布局上加载:

@Scripts.Render("~/bundles/jquery")

按钮有效时要尝试的事情:

1) 给表单一个ID或者使用表单标签提交onclick="$('#IdOfForm').submit();"

2) 如果单个存在,则在页面上查找表单标签 onclick="$('form').submit();"

3) 查找表单 parent onclick="$('this').parents('form').submit();" 或查找表单标签的其他语法。

4) 或者直接触发按钮点击onclick="$('#IdOfSubmBtn').click();"

所以我会在函数中放置 onclick 事件,并查看它在每一步中得到了什么。或者

有时它需要很少的延迟,因为 DOM 接收 AJAX 事件的速度很慢。 onclick="setTimeout(function() { yours,1,2, or 3 }, 300);"