2009-09-09 3 views
0

Hallo,Jquery - как получить элемент, который сделал пост

У меня следующий код JQuery для вызова ASP.NET MVC метод контроллера, который возвращает HTML, созданный с использованием частичного View.

$("form[action$='ShowProperties']").submit(function() { 
$.post($(this).attr("action"), $(this).serialize(), function(response) { 

     $(this).children("div.serviceproperties").html(response); 
     // $("div.serviceproperties").html(response); 

    }); 
    return false; 
}); 

Вынесено HTML выглядит следующим образом:

<ul> 
<li class="serviceactionitem"> 
    <form method="post" action="/Service/ShowProperties"> 
     <input type="submit" value="Show General" name="[Show]"/> 
     <input id="id" type="hidden" value="1" name="id"/> 
     <input id="serviceitem" type="hidden" value="general" name="serviceitem"/> 
     <div class="serviceproperties"> </div> 
    </form> 
</li> 
<li class="serviceactionitem"> 
    <form method="post" action="/Service/ShowProperties"> 
     <input type="submit" value="Show Specific" name="[Show]"/> 
     <input id="id" type="hidden" value="1" name="id"/> 
     <input id="serviceitem" type="hidden" value="specific" name="serviceitem"/> 
     <div class="serviceproperties"> </div> 
    </form> 
</li> 

Отклик HTML, которые должны быть установлены внутри сНу элемента, который находится внутри элемента формы. У меня есть несколько элементов формы на странице, и я не знаю, как обновить div внутри правильной формы. Прокомментированный код, конечно, обновляет divs из каждой формы на странице.

Главное, что $ (this) не возвращает элемент формы, что, вероятно, является нормальным. Таким образом, мне нужен способ обращения к соответствующему элементу формы внутри функции, которая обрабатывает ответ, а также для поиска и изменения div внутри него.

Благодаря

ответ

1

Просто повторно форму:

$("form[action$='ShowProperties'] div.serviceproperties").html(response); 

Или захватить первый элемент:

$("form[action$='ShowProperties']").submit(function() { 
var $form = $(this); 

$.post($(this).attr("action"), $(this).serialize(), function(response) { 

     $("div.serviceproperties",$form).html(response); 

    }); 
    return false; 
}); 
+0

Видимо, это было не так просто для меня :) Первый вариант не работает для меня, потому что у меня есть более одного элемента, который отвечает запросу, но второй работает как заклинание. Большое спасибо Philippe –