2013-05-01 93 views
1

我想改变一个全局jQuery变量在foreach循环内每次有一个新的模型项目的值。我想添加新的日期到日历,但不能这样做,直到我可以从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> 

Razor视图:

<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'是unde罚款'

回答

0

尝试移动您的添加功能和变量声明以外的doc准备好了。直到您的剃须刀执行完毕,doc doc中的功能才可用。

+0

感谢您的快速响应。我已经尝试了它进出document.ready,并调整了这个问题以外的代码,因为只有在它内部移动它才能测试 – ConfusedShark 2013-05-01 10:57:27

1

如果你只是想捕捉到你想要向下发送到客户端“计数”,那么你可以简单地做这样的:

<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警报。

+0

你很对,就像我描述的那样工作,所以非常感谢。看起来我过于简化了我的问题,例如病毒更新,但最终产品需要做的不仅仅是添加,所以我需要能够从foreach循环中看到jquery – ConfusedShark 2013-05-01 11:08:33

+0

我认为你需要的不是从视图中查看jquery,而是生成一些可以发送给客户端的信息,以便它可以在js/jquery中使用。更好地编辑你的问题,并给出一个更具体的例子。可以有很多方法来实现你想要的。 – 2013-05-01 11:12:04