从外部输入动态更改脚本

时间:2014-01-09 16:12:29

标签: javascript jquery

这个问题在概念上更具概念性,然后在代码方面具体。

我有一个简单的JavaScript,可以显示我公司是否开放以及我们在一周中任何一天的开放时间。

jQuery(document).ready(function($) {
    var d = new Date();

    var curDay = d.getDay();

    $('#curDay').html(curDay);

    if (curDay==1 || curDay==4) {
        $('#hours-operation').html("We are open today<br>from 11am - 6pm");
    } else if (curDay==3 || curDay==5) {
        $('#hours-operation').html("We are open today<br>from 11am - 9pm");
    } else if (curDay==0 || curDay==6) {
        $('#hours-operation').html("We are open today<br>from 10am - 6pm");
    } else {
        $('#hours-operation').html("We are closed today<br><br>");
    }

});

最近,由于恶劣的天气,我们已定期关闭。有没有办法让外部实体更改脚本,例如表单输入?并且当时钟移动到第二天时将其自行移除,从而将脚本重置为其原始状态?最好的方案是根本不编辑脚本本身。

3 个答案:

答案 0 :(得分:2)

您需要的不仅仅是javascript / jquery才能实现这一点,这是一个表单,某种后端存储数据和您的javascript将查询的Web服务。

答案 1 :(得分:2)

保存数据库中的外部实体,当您尝试显示此列表时,您可以进行ajax调用并获取是否有任何天未打开并进行设置。我在代码中将其描述为注释。 在您的数据库中,您需要保存您将通过表单获得的信息:

 date, start time,endtime

然后在你的javascript中:

jQuery(document).ready(function($) {

   // make an ajax call and get data with current day.
   // check if it has any data for this day
  if (you have  data){
      set in your hours-operation
    }else
   {

      var d = new Date();     
      var curDay = d.getDay(); 
       $('#curDay').html(curDay);   
       if (curDay==1 || curDay==4) {
          $('#hours-operation').html("We are open today<br>from 11am - 6pm");
       } else if (curDay==3 || curDay==5) {
          $('#hours-operation').html("We are open today<br>from 11am - 9pm");
       } else if (curDay==0 || curDay==6) {
          $('#hours-operation').html("We are open today<br>from 10am - 6pm");
       } else {
          $('#hours-operation').html("We are closed today<br><br>");
        } 
    }

});

我认为这是有道理的:)

答案 2 :(得分:0)

我不确定是否全部了解。然而... 是的,您可以覆盖此代码。

但是

如果您不想更改脚本,则需要添加覆盖行为的脚本。

像:

 $(function({

      /*exec your code*/

      if (/* extraordinary condition true or false? */) {
            $('#hours-operation').html("We are closed today<br><br>");
      }
 });

但最好在函数内或条件内缩进代码:

var dayOpen = function(){

     /*your code*/

}

$(function({
      if (/* extraordinary condition true or false? */) {
            dayOpen();

            /*or your code*/

      }else{
            $('#hours-operation').html("We are closed today<br><br>");
      }
 });

无论如何我同意其他用户。您需要一些动态信息来构建/* extraordinary condition true or false? */

对我来说,有两种主要方式:

  1. 使用您可以通过ajax调用的服务端API(PHP,JAVA,RUBY,ecc ...)来了解您的业务今天是否已开启:

    $(function(){
        $.ajax({
            url : /* your API link*/,
            dataType : "json", /*[see example response at the and of the code] */
            success : function(res){
                if(res.problem) return $('#hours-operation').html(res.message+"<br><br>");
                /*your normal code here*/
            }
        })
    })
    

    响应示例:

    {
        problem : true, //or false if there are no problem with opening
        message : "Today we are closed for inclement weather"
    }
    
  2. 在FTP中使用静态文件。在这种情况下,你只需要通过ajax(HEAD)调用你的网站空间内的一个文件,如果这个文件存在(响应不是404),javascript知道“今天有一个特别的结束”:

    $(function(){
        $.ajax({
            type : "head",
            url : /* link to your file*/,
            success : function(res){
                $('#hours-operation').html("Today we are extraordinarily closed<br><br>");
            },
            error : function(){
                /*no file NO PROBLEM*/
                /* your normal code here */
            }
        })
    })
    

    您的文件可以是JSON或TXT以获取更多信息,我的情况最简单,服务器工作量最低(HEAD CALL not GET)

  3. 我不是英语...所以我的英语不好,因为现在我需要去,我无法阅读和纠正我的错误,我希望你能理解。