Начало работы jquery: ошибка «объект ожидается» - PullRequest
1 голос
/ 13 октября 2009

Я создаю базовое приложение 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();
}

Какой базовый шаг я пропустил?

Бонус: может кто-нибудь указать мне на учебник, который помог бы мне с этой ошибкой?

Ответы [ 5 ]

2 голосов
/ 13 октября 2009

Вероятно, когда вызывается $ ("# 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 голос
/ 14 октября 2009

У вас атрибут src в вашем jQuery указан неверно. Либо возьмите ~ или используйте <%= 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 , $.post(url) отправит запрос и проигнорирует результат. Вы сказали, что отправляете форму, но с $.post(), который вы используете, данные не передаются. Я не могу сказать, это твои намерения или нет из твоего фрагмента кода. Предполагая, что у вас есть только одна форма на странице, вы можете изменить ваши почтовые звонки на $.post('YourUrlHere', $('form').serialize());, и это будет включать данные формы вместе с постом.

Ваш идентификатор кнопки уникален для этой страницы? Вы пробовали код вручную в консоли FireBug JavaScript? Все ли ваши скобки и скобки соответствуют друг другу? Маршрутизация mvc asp.net и здесь может быть неправильной, но если у вас все еще есть маршрут по умолчанию, тогда это должно работать, если вы не установили другой маршрут до маршрута по умолчанию.

1 голос
/ 13 октября 2009

Вы делаете одно и то же 2 разными способами, нажимая кнопки. Сделайте их униформы для начала. Ваш старт активен, потому что функция не существует .. и остановка может быть бомбардировкой по нескольким причинам. Для начала ... заставьте их обоих работать одинаково, либо.

Измените свой скрипт на это (прямые функции 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>

OR

(способ регистрации в 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 скажи мне, с кем ты идешь, и я могу объяснить тебе это, если хочешь.

ОБНОВЛЕНИЕ : Что касается бомбардировки StopTask, есть ли у вашего метода контроллера MVC это выше этого?

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

Это необходимо, если вы используете команду $ .post ().

0 голосов
/ 13 октября 2009

Я бы удалил оба

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

Они делают то же самое (обрабатывают событие), что и щелчок jQuery. Вам не нужны два обработчика событий, и у вас уже нет объявленной функции 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>
0 голосов
/ 13 октября 2009

Попробуйте удалить onclick="StartTask()"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...