1

現在作業を行っているタブに部分的なビューを返すasp.netページがあります.jQueryをすべてセットアップして動作させています。1回だけ機能し、ajaxを介して部分ビューを返します.html(result);

ただし、これは一度しか機能しません。ボタンをクリックすると、バックグラウンドですべての処理が行われ、html が置き換えられます。次に、ボタンをもう一度クリックしても、これらのボタンには jQuery が存在しないようです。ページのリロードはありません。これはすべて ajax を介して行われます。

ページが最初にロードされるときに使用される HTML と .html(result) を介して返される HTML は、まったく同じ html 同じ部分ビューが両方に使用されます。

この部分的なビューが返されたときに、jQuery が何らかの形で切断されていますか?

これが私のAjax呼び出しです:

function updateSort(object) {
    jQuery.ajax({
        url: "/MasterList/UpdateSort",
        type: "get",
        data: object, //if you need to post Model data, use this
        success: function (result) {
            //alert('success');
            //console.log(result);
            jQuery("#procedures").html(result);
        }
    });
}

ボタンのクリックは次のとおりです。

jQuery(".btnMoveUp").click(function () {
        var $this = jQuery(this),
            processID = $this.data('processid'),
            currProcedureID = $this.data('procedureid'),
            currSortOrder = $this.data('sortorder'),
            idx = jQuery('.commentlist li').index($this.closest('li')),
            $prevLi = jQuery('.commentlist li').eq(idx - 1),
            $anchor = $prevLi.find('.btnContainer a'),
            prevProcedureID = $anchor.data('procedureid'),
            prevSortOrder = $anchor.data('sortorder');

        // create object that we can pass to MVC controller
        var objProcedure = {};

        objProcedure = {
            _processID: processID,
            _currProcedureID: currProcedureID,
            _currSortOrder: currSortOrder,
            _switchProcedureID: prevProcedureID,
            _switchSortOrder: prevSortOrder
        }

        updateSort(objProcedure);

    });

なぜこれが1回しか機能しないのですか?

4

3 に答える 3

3

次のように、委任されたイベント ハンドラーを使用する必要があります。

$('#procedures').on('click', '.btnMoveUp', function () {
    var $this = jQuery(this),
        processID = $this.data('processid'),
        currProcedureID = $this.data('procedureid'),
        currSortOrder = $this.data('sortorder'),
        idx = jQuery('.commentlist li').index($this.closest('li')),
        $prevLi = jQuery('.commentlist li').eq(idx - 1),
        $anchor = $prevLi.find('.btnContainer a'),
        prevProcedureID = $anchor.data('procedureid'),
        prevSortOrder = $anchor.data('sortorder');

    // create object that we can pass to MVC controller
    var objProcedure = {};

    objProcedure = {
        _processID: processID,
        _currProcedureID: currProcedureID,
        _currSortOrder: currSortOrder,
        _switchProcedureID: prevProcedureID,
        _switchSortOrder: prevSortOrder
    }

    updateSort(objProcedure);
});
于 2013-09-12T16:19:02.903 に答える