JQuery не работает после AJAX Post Asp.net MVC3 - PullRequest
0 голосов
/ 27 декабря 2011

Я делаю пост обратно, чтобы получить частичное представление, используя ajax. Вот код, который я использую для отображения частичного представления в div, называемом DivSearchGrid.

 <script type ="text/javascript" >
       $('#Retrieve').click(function () {
           $('form').get(0).setAttribute('action', 'Search');
           //                      $('form').submit();
           var formSubmit = $('form');
           var datTab;
           $.ajax({
               url: "/AuthorityGrid/Search",
               type: "POST",
               data: formSubmit.serialize(),
               success: function (data) {
                   datTab = data;
               },
               complete: function () {
                   $('#DivSearchGrid').html(datTab);

               }

           })
           return false;
       });
   </script>

Метод действия в контроллере возвращает сетку с новыми значениями. моя проблема в том, что после завершения вызова ajx другие jquery события на моей странице перестают работать. Код для некоторых событий выглядит следующим образом.

<script type="text/javascript">

        $(function () {
            //$('th[scope|="col"]').resizable();
            $("#resultGrid > tbody").selectable({
                selected: function (event, ui) {
                    if (ui.selected.cells != null) {
                        var strAmount = ui.selected.cells(6).innerText;
                        var Amount = strAmount.replace(/,/gi, "");
                        var keyValue = "AuthorityLevel1=" + ui.selected.cells(11).innerText + ",AuthorityLevel2=" + ui.selected.cells(12).innerText + ",TcmAccount=" + ui.selected.cells(2).innerText + ",TcmType=" + ui.selected.cells(10).innerText + ",Rating=" + ui.selected.cells(5).innerText + ",Amount=" + Amount + ",AuthorityGridKey=" + ui.selected.cells(9).innerText + ",CagName=" + ui.selected.cells(3).innerText
                        var keyValModify = ui.selected.cells(11).innerText + "," + ui.selected.cells(10).innerText + "," + ui.selected.cells(12).innerText + "," + ui.selected.cells(5).innerText + "," + ui.selected.cells(2).innerText + "," + Amount + "," + ui.selected.cells(3).innerText + "," + ui.selected.cells(9).innerText
                        $('#CancelViewParam').val(keyValue);
                        $('#ModifyViewParam').val(keyValModify);

                    }
                }
            });
        });
    </script>

эта функция выбирает строку в сетке и помещает выбранные значения в скрытое поле.

Также функция вызова всплывающих окон не работает после ajax call.code для этой функции.

$(function () {
    $("#DivSearch").dialog({ autoOpen: false, height: "600", width: "600", dialogClass: "myRatingHelp", modal: true });
    $('#bRatingHelperDivSearch').live('click',function () { $('#DivSearch').dialog('open'); });
    $('#DivSearchRating_bOk').click(function () {
    $("#InputAuthorityGridSearch_Rating").val($("#hidRating").val());
    $("#DivSearch").dialog('close');
    });
    $('#DivSearchRating_bCancel').click(function () {
    $("#DivSearch").dialog('close');
    });
    });

Все эти функции прекрасно работают до вызова ajx, но все перестают работать после вызова, может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2011

проверьте страницу "/ AuthorityGrid / Search", если вы снова включите jquery на этой странице, это создаст проблему при повторном событии jquery.Всегда включайте JQuery на главной странице.

0 голосов
/ 27 декабря 2011

Поместите вашу функцию загрузки страницы jQuery в одну пользовательскую функцию, такую ​​как

function initializeLoad() {
    $("#DivSearch").dialog({ autoOpen: false, height: "600", width: "600", dialogClass: "myRatingHelp", modal: true });
$('#bRatingHelperDivSearch').live('click',function () { $('#DivSearch').dialog('open'); });
$('#DivSearchRating_bOk').click(function () {
$("#InputAuthorityGridSearch_Rating").val($("#hidRating").val());
$("#DivSearch").dialog('close');
});
$('#DivSearchRating_bCancel').click(function () {
$("#DivSearch").dialog('close');
});
}
initializeLoad();

Теперь поместите скрипт, указанный ниже в конце страницы:

  <script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    function EndRequestHandler(sender, args) {
        if (args.get_error() == undefined) {
        initializeLoad();
    }
}

нижеСкрипт будет вызывать ваш метод загрузки страницы jQuery каждый раз, когда выполняется частичная обратная передача.

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

внешняя ссылка: http://www.aboutfortunate.com/Technology-Blog.aspx?entid=29

Надеюсь, это поможет вам.

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