点击处理程序不激活(局部视图)

时间:2012-07-17 06:18:38

标签: jquery ajax asp.net-mvc asp.net-mvc-3 partial-views

我有一个带有javascript代码的ViewDesk.js文件 在View

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

Desk.js文件中:

$(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();
    });
}

包含sched类和a标记的元素在部分视图中包含加载到wraper div元素中。

click处理程序中的问题没有解决,但alert调用正常。怎么解决?
感谢

3 个答案:

答案 0 :(得分: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方法的成功回调。

答案 1 :(得分:1)

您需要在加载回调中调用toggleSession(),否则内容可能尚未加载,因此您的选择器无法找到所需的元素。

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

答案 2 :(得分: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()

的回调中调用该函数