0

以下选择框允许用户选择他们希望为给定橄榄球比赛购买的门票数量。

用户有权购买多场橄榄球比赛的门票,因此存在查询循环。

如您所见,选择框的 id 属性有两个动态值——第一个“currentrow”只是帮助识别我们正在处理的特定选择框。我添加了“matchID”,因为我们正在实施一条新规则,该规则规定用户每场比赛每次交易不能购买超过 4 张门票。以前的限制是每次交易 4 张门票,无论他们购买了多少场不同的比赛门票。

<cfloop query="qEntitlements">
     <select class="quantity" name="qty_#currentrow#_#matchID#" id="qty_#currentrow#_#matchID#">
          <cfloop from="0" to="#qEntitlements.qty#" index="i">
               <option value="#i#">#i#</option>
          </cfloop>
     </select>
</cfloop>

因此,我需要 jQuery 来记录用户在每次比赛中选择的门票数量,并在达到给定比赛的限制时发出警报。

下面的 jQuery 适用于每笔交易 4 张票的旧规则(简化以删除任何不相关的处理):

function calcTotals(){
     var qty = 0;
     $('.quantity').each(function(){ 
          var thisline = thisid.split("_")[1];
          var thismatchid = thisid.split("_")[2]; // in preparation for new rule
          var thisqty = $('#qty_' + thisline + '_' + thismatchid  + ' option:selected').val();

          qty += Number(thisqty);

          // Limit to 4 tickets per order transaction
          // ToDo: Change this to 4 tickets per match per order
          if(qty > 4){
               alert('You are entitled to purchase a maximum of 4 tickets per order.');
               return false;
          } 
     })
}


$(document).ready(function(){   
     $(".quantity").change(function(e){
          calcTotals();
     })
})

您可以在此页面上看到当前系统正在运行。

编辑澄清

我们需要统计给定比赛的总数量,因为同一场比赛可能有不同的座位类别(例如金牌、银牌)。请参阅我在 OP 中包含的示例页面。这是指定用户看到的内容(用户由 url 中的“i”参数指定)。在这种情况下,每一行都是相同的匹配,但不同的类别。其他用户会看到不同的权利,这些权利可能适用于多个匹配/类别组合。.

4

2 回答 2

1

我似乎已经用以下代码解决了它:

function calcTotals(){
     var qty = 0;
     var matchIDs = [];
     var matchOccurs = {};

     $('.quantity').each(function(i,selected){ 
          var thisid = $(this).attr("id"); 
          var thisline = thisid.split("_")[1];
          var thismatchid = thisid.split("_")[2];
          var thisunit = $('#unit_' + thisline).html();
          var thisqty = $('#qty_' + thisline + '_' + thismatchid + ' option:selected').val();

          if(thisqty > 0){
               matchIDs[i] = thismatchid;               
               // Limit to 4 tickets PER VENUE/EVENT per Transaction
               if (matchOccurs[matchIDs[i]] != null ) { 
                    matchOccurs[matchIDs[i]] += Number(thisqty); 
               }else {
                    matchOccurs[matchIDs[i]] = Number(thisqty); 
               }

               if(matchOccurs[matchIDs[i]] > 4){
                    alert('You are entitled to purchase a maximum of 4 tickets per match per order.');
                    $('#qty_' + thisline + '_' + thismatchid).val(0);
                    return false;
               }
          }
     })
}
于 2013-09-20T02:52:51.763 回答
0

你的意思是什么?

快速提问,如果您只是想确保用户不选择大于 4 的数量,为什么需要“存储”该值?如果是这样,为什么不限制下拉列表中的选项数量?我想我可能会误解你在这里的需要。

 $('body').delegate('select[id*="qty_"]','onchange', function(){
   if($(this).val() > 4){
      // what do you want to have happen here IF they choose more than 4?
   }
 })

或仅使用您的代码:

 $('select[id*="qty_"]').change(function(){
    if($(this).val() > 4){
       alert("too many tickets selected for event: " + $(this).closest('tr').first('td').text());
    }
  })
于 2013-09-19T23:51:15.467 回答