获取jquery:'对象预期'错误

时间:2009-10-13 15:14:58

标签: jquery asp.net-mvc

我正在创建一个基本的ASP.NET MVC应用程序。我想使用jquery让两个按钮以不同的方式提交表单。我得到的错误是“预期的对象”。

以下是按钮:

<input type="button" id="StartTask" value="Start" onclick="StartTask()" />
<input type="button" id="StopTask"  value="Stop"  onclick="StopTask()"  />

以下是我的脚本标记:

<script src="~/Scripts/jquery-1.3.2.js"       type="text/javascript" />
<script src="~/Scripts/jquery-1.3.2-vsdoc.js" type="text/javascript" />
<script type="text/javascript">
    $("#StartTask").click(function() {
        $.post("/Home/StartTask");
    });
    function StopTask() {
        $.post("/Home/StopTask");
    }
</script>

功能不同,因为我正在尝试不同的事情 随着jquery包含,两个按钮给我“对象预期”。没有jquery包含,开始按钮炸弹$(“#StartTask”)和$ .post()上的第二个炸弹。

编辑:添加控制器方法

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult StartTask()
{
    return View();
}

我错过了什么基本的,noob步骤?

奖励:有人可以指点我的教程可以帮助我解决这个错误吗?

5 个答案:

答案 0 :(得分:2)

可能在调用$(“#StartTask”)时,您尚未添加到DOM树中。

一个可靠的方法是:

<script type="text/javascript">
  $(window).ready(function(){
    $("#StartTask").click(function() {
        $.post("/Home/StartTask");
    });
    $("#StopTask").click(function() {
        $.post("/Home/StopTask");
    });
  });
</script>

<input type="button" id="StartTask" value="Start" />
<input type="button" id="StopTask"  value="Stop" />

答案 1 :(得分:1)

按钮点击,您以两种不同的方式做同样的事情。让它们统一开始。你的开始很快,因为这个功能不存在......由于几个原因,停止可能是爆炸。要开始......让他们两个都一样工作。

将脚本更改为此(直接JS函数):

<script src="~/Scripts/jquery-1.3.2.js"       type="text/javascript" />
<script src="~/Scripts/jquery-1.3.2-vsdoc.js" type="text/javascript" />
<script type="text/javascript">
    function StartTask() {
        $.post("/Home/StartTask");
    }
    function StopTask() {
        $.post("/Home/StopTask");
    }
</script>

(jQuery注册方式)

你的按钮:

<input type="button" id="StartTask" value="Start" />
<input type="button" id="StopTask"  value="Stop"  />

以及您的代码:

<script src="~/Scripts/jquery-1.3.2.js"       type="text/javascript" />
<script src="~/Scripts/jquery-1.3.2-vsdoc.js" type="text/javascript" />
<script type="text/javascript">
    $.(document).ready(function() {
        $("#StartTask").click(function() {
            $.post("/Home/StartTask");
        });
        $("#StopTask").click(function() {
            $.post("/Home/StopTask");
        });
    });
</script>

PS告诉我你选择哪一个,如果你愿意,我可以为你进一步解释。

UPDATE :关于StopTask轰炸,您的MVC控制器方法是否具有此功能?

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult StopTask() {

如果您使用$ .post()命令,则需要它。

答案 2 :(得分:1)

你的jQuery中的src属性包含错误。取出~  或使用<%= Url.Content()。另外,我对自动关闭脚本标签没有好运,所以我避免使用它们,但这可能只是我的迷信。

尝试其中任何一种

<script src="/Scripts/jquery-1.3.2.js" type="text/javascript"></script>
<script src="<%= Url.Content("~/Scripts/jquery-1.3.2.js") %>" type="text/javascript"></script> 

在我发现错字之前我输入了以下内容,它可能仍然有用:

根据jQuery docs$.post(url)会发送请求并忽略结果。您说您正在提交表单,但使用您正在使用的$.post()时,并未提交任何数据。我无法从你的代码片段判断这是否是你的意图。假设您在页面上只有一个表单,则可以将帖子调用更改为$.post('YourUrlHere', $('form').serialize());,其中包括表单数据和帖子。

您的按钮ID是否对页面而言是唯一的?您是否在FireBug JavaScript控制台中手动尝试了代码?你的所有牙套和括号都能正确匹配吗?你的asp.net mvc路由也可能在这里错了,但如果你仍然只有默认路由,那么除非你在默认路由之前放置了另一条路由,否则这应该有效。

答案 3 :(得分:0)

尝试删除onclick="StartTask()"

答案 4 :(得分:0)

我会删除

onclick="StartTask()"
onclick="StopTask()"  

它们与jQuery的.click做同样的事情(处理事件),你不需要两个事件处理程序,并且你已经没有声明StartTask函数。

相反,请在JavaScript中执行事件处理。

<script src="~/Scripts/jquery-1.3.2.js"       type="text/javascript" />
<script src="~/Scripts/jquery-1.3.2-vsdoc.js" type="text/javascript" />
<script type="text/javascript">
// this does not execute the query until the DOM is ready
// passes the "jQuery" to it in case you have other $ libraries
(function($) {
    // this adds the click event to the StartTask
    $("#StartTask").click(function() {
        $.post("/Home/StartTask");    
    });

    // this adds the click event to the StopTask
    $("#StopTask").click(function() {
        $.post("/Home/StopTask");    
    });

})(jQuery);
</script>