0

I have a View and Desk.js file with javascript code.
In the View:

<script src='@Url.Content("~/Scripts/KazBilet/Desk.js")' type="text/javascript"></script> 

In the Desk.js file:

$(function () {
    $('.wraper').load('/desk/getsessionscreen');
    toggleSession();
});

function toggleSession() {
    alert('a');
    $('.sched a').on('click', function () {
        var target = $(this);
        $(this).toggleClass('selected');
        $('.sched a').not(target).each(function () {
            $(this).removeClass('selected');
        });

        setStateForStepButton();
    });
}

The elements with sched class and a tags contains in partial view which loaded in wraper div element.

The problem in that click handler not fire, but alert calls fine. How to solve it?
Thanks

4

3 に答える 3

2

クリック サブスクリプション コードを外部に配置できます。DOM の準備が整うまで待つ必要さえありません。

$('.sched').on('click', 'a', function () {
    var target = $(this);
    $(this).toggleClass('selected');
    $('.sched a').not(target).each(function () {
        $(this).removeClass('selected');
    });

    setStateForStepButton();
});


$(function () {
    $('.wraper').load('/desk/getsessionscreen', function() {
        toggleSession();
    });

});

function toggleSession() {
    alert('a');
}

.on()活発に登録したい場合は、メソッドに使用している正しいオーバーロードにも注意してください。

$('.sched').on('click', 'a', function () {

また、AJAX 呼び出しが成功したときに関数を呼び出したい場合toggleSessionは、メソッドの成功コールバックを使用する必要があることに注意してください.load

于 2012-07-17T06:22:11.873 に答える
1

load のコールバックで toggleSession() を呼び出す必要があります。そうしないと、コンテンツがまだロードされていない可能性があるため、セレクターは目的の要素を見つけることができません。

$('.wraper').load('/desk/getsessionscreen', function () {
    toggleSession();
});
于 2012-07-17T06:22:17.187 に答える
0

コードは正しいようですが、過去にon(). これを試して:

$(document).on('click', '.sched a', function () {
    var target = $(this);
    $(this).toggleClass('selected');
    $('.sched a').not(target).each(function () {
        $(this).removeClass('selected');
    });

    setStateForStepButton();
});

selectedまた、クリックされたものだけにクラスを設定しようとしている場合はa、コードを次のように書き直す必要があります。

$(document).on('click', '.sched a', function () {
    $('.sched a').removeClass('selected');
    $(this).addClass('selected');

    setStateForStepButton();
});

そして、yan.kunが言ったように、のコールバックで関数を呼び出しますload()

于 2012-07-17T06:24:27.963 に答える