0

クライアントのサイトのプラットフォームとして Nation Builder を使用しており、年齢ゲートを作成する必要があります。別のページで年齢確認を行いますが、明らかにこのプラットフォームでは機能しないため、Jquery ダイアログを使用してホームページの上に表示しています。age の動作を確認するために取得したコードですが、URL リダイレクトの代わりにウィジェット UI を閉じるために微調整する必要があります。

私はプログラミングの専門家ではないので、何か助けて、それを馬鹿にしていただければ幸いです。ここにリンクがあります。http://patricialourenco.com/test.html 乾杯!

var ageCheck = {

  //Set the minimum age and where to redirect to
  minimumAge : 13,
  userIsOldEnoughPage : "http://www.bullyproject.com",
  userNotOldEnoughPage : " http://www.pacerkidsagainstbullying.org/#/home",


  //Leave this stuff alone please :)

  start: function() {
    this.setUsersBirthday();
    if (this.userIsOverMinimumAge()) {
      this.setCookie("usersBirthday",this.usersBirthday,30);
      window.location = this.userIsOldEnoughPage; 
    } else{
      this.notMinimumAge();
    };
  }, 

  usersBirthday : new Date(),

  setTheMonth : function() {
    var selectedMonth = document.getElementById("month").value;
    if (selectedMonth === "1") {
      this.setDaysForMonth(29);
    } 
    else if (selectedMonth === "3" ||
             selectedMonth === "5" || 
             selectedMonth === "8" ||
             selectedMonth === "10") {
      this.setDaysForMonth(30);
    }
    else {
      this.setDaysForMonth(31);
    };
  },

  setDaysForMonth : function(x) {
    var daySelectTag = document.getElementsByName('day')[0];
    daySelectTag.options.length = 0;
      for(var i=1; i <= x; i++) {
      daySelectTag.options.add(new Option(i, i));
    }
  },

  setUsersBirthday: function() {
    var usersMonth = document.getElementById("month").value;
    var usersDay = document.getElementById("day").value;
    var usersYear = document.getElementById("year").value;
    this.usersBirthday.setMonth(usersMonth);
    this.usersBirthday.setDate(usersDay);
    this.usersBirthday.setFullYear(usersYear);
  },

  setMinimumAge: function() {
    var today = new Date();
    today.setFullYear(today.getFullYear() - this.minimumAge);
    return today;
  },

  notMinimumAge : function() {
    window.location = this.userNotOldEnoughPage
  },

  userIsOverMinimumAge: function () {
    if (this.usersBirthday < this.setMinimumAge()) {
      return true;
    }
  },

  setCookie: function (c_name,value,exMinutes) {
    var exdate=new Date();
    exdate.setMinutes(exdate.getMinutes() + exMinutes);
    var c_value=escape(value) + ((exMinutes==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=c_name + "=" + c_value;
  },

  getCookie: function (c_name) {
    var i,x,y,ARRcookies=document.cookie.split(";");
    for (i=0;i<ARRcookies.length;i++)
    {
      x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
      x=x.replace(/^\s+|\s+$/g,"");
      if (x==c_name)
      {
        return unescape(x);
      }
    }
  },

  checkCookie:   function () {
    var usersBirthday=this.getCookie("usersBirthday");
    if (usersBirthday==null || usersBirthday=="") {
      window.location = "ageCheckTester.html";
    }
  }
}
4

1 に答える 1

0

.close メソッドを探していると思います。ユーザーがボタンを押して年齢を送信した後、次のように使用します。

$('#dialog-modal').dialog('close'); //hides modal, shows content behind

jQuery UI ダイアログに関するその他のドキュメント:

http://api.jqueryui.com/dialog/#method-close


編集: start() メソッドを更新する方法は次のとおりです。

 start: function() {
   this.setUsersBirthday();
   if (this.userIsOverMinimumAge()) {
     this.setCookie("usersBirthday",this.usersBirthday,30);
     $('#dialog-modal').dialog('close');
   } else{
     this.notMinimumAge();
   };
 }, 

JSFiddle デモ: http://jsfiddle.net/donmccurdy/czERa/


EDIT #2 - (すべてのページで Cookie をチェックすることに関する OP の質問への回答)

Cookie をチェックするコードにいくつかのバグがありました。私は JSFiddle を更新しました。何が間違っていたかを簡単に説明します。

1) 常にダイアログを表示する現在のコードの代わりに、最初に Cookie を確認します。このような:

$(function() {
    window.ageCheck.checkCookie();
});

2) 必要に応じてダイアログを表示するように checkCookie() メソッドを更新します。

checkCookie:   function () {
  var usersBirthday=this.getCookie("usersBirthday");
  if (!usersBirthday) {
     // unknown age - show dialog.
     $( "#dialog-modal" ).dialog({modal: true});
     return;
  }
  this.usersBirthday = new Date(usersBirthday);
  if (this.userIsOverMinimumAge()) {
     $('#dialog-modal').hide();
     // user is > 13, don't show dialog.
 } else {
    // user is < 13, redirect to another page.
    this.notMinimumAge(); 
 }
}

3) 誕生日自体の代わりに「usersBirthday」を返していたため、getCookie メソッドにバグがあります。ここで修正:

getCookie: function (c_name) {
  var i,x,y,ARRcookies=document.cookie.split(";");
  for (i=0;i<ARRcookies.length;i++)
  {
    //split on '=', then check cookie
    x=ARRcookies[i].split('=');
    if (x[0]===c_name){
      return unescape(x[1]);
    }
  }
},
于 2013-06-06T15:53:07.760 に答える