【问题标题】:Reference Global jquery function variable within foreach loop在 foreach 循环中引用全局 jquery 函数变量
【发布时间】:2013-04-25 08:44:56
【问题描述】:

每次有新模型项时,我都想在 foreach 循环中更改全局 jquery 变量的值。我想在日历中添加新日期,但在我可以从 foreach 循环访问这些函数之前无法执行此操作。

*编辑***

我为vov v正确回答的问题简化了我的示例。实际代码将做的不仅仅是添加一个值,因为它会将数据添加到日历中。我添加了更多代码来展示它会做得更好

jquery:

<div id="calendar" style="width: 500px;" />
<script type="text/javascript">

    $(document).ready(function () {

        var calendar = $('#calendar').glDatePicker(
        {
            showAlways: true,
            borderSize: 0,
            dowOffset: 1,
            selectableDOW: [1, 2, 3, 4, 5],
            selectableYears: [2012, 2013, 2014, 2015],
            specialDates: [
                {
                    date: new Date(2013, 0, 8),
                    data: { message: 'Meeting every day 8 of the month' },
                    repeatMonth: true
                },
                {
                    date: new Date(2013, 5, 7),
                    data: { message: 'Meeting every day 8 of the month' }
                },
            ],
            onClick: function (target, cell, date, data) {
                target.val(date.getFullYear() + ' - ' +
                            date.getMonth() + ' - ' +
                            date.getDate());

                if (data != null) {
                    alert(data.message + '\n' + date);
                }
            }
        }).glDatePicker(true);

        $('#visible').change(function () {
            var showAlways = eval($(this).val());
            calendar.options.showAlways = showAlways;

            if (!showAlways) {
                calendar.hide();
            }
            else {
                calendar.show();
            }
        });

    });
       var value = 0;

        $('#total').click(function () {
            alert(value);
        });


        function add() {

        // will eventually add new specialDates to the calendar taken from model items

        //test lines                
        //value = value + 1;
            //return value;
        }

</script>

剃刀视图:

<input type="button" id="total"  />

@foreach (var item in Model){
    if (item.AppointmentStatus == "active")
{   
    // item display code

    @: <script type="text/javascript"> add();</script> 
}

if (item.AppointmentStatus == "history")
{
        // item display code
}

}

我运行它并在下面出现错误,因为它没有看到其他代码

'0x800a1391 - JavaScript 运行时错误:'add' is undefined'

【问题讨论】:

    标签: javascript jquery asp.net-mvc razor foreach


    【解决方案1】:

    尝试将您的 add 函数和变量声明移到准备好的文档之外。在您的剃须刀执行之前,文档就绪中的功能不可用。

    【讨论】:

    • 感谢您的快速回复。我已经尝试进出 document.ready 并调整了问题以将代码移到此之外,因为仅在其中移动以进行测试
    【解决方案2】:

    如果您只想捕获要发送给客户的“计数”,那么您可以这样做:

    <script>
        var value = '@Model.Count';
        // the rest of you script goes here
        $(document).ready(function () {
            $('#total').click(function () { 
                alert(value);
            }
        });
    </script>
    

    假设你的模型中有 7 个项目,那么将生成的 html 是这样的:

    var value = 7;
    

    当您单击该 total 元素时,它会给您一个带有文本 7 的警报。

    【讨论】:

    • 您完全正确,正如我所描述的那样,非常感谢。似乎我为示例过度简化了我的问题,所以我会更新它,但最终产品需要做的不仅仅是添加,所以我确实需要能够从 foreach 循环中看到 jquery
    • 我认为您需要的不是从视图中查看 jquery,而是构建一些可以发送到客户端的信息,以便可以在 js/jquery 中使用。更好地编辑您的问题并举一个更具体的例子。有很多方法可以实现您想要的。
    猜你喜欢
    • 2023-03-24
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    相关资源
    最近更新 更多