【问题标题】:Javascript variable doesn't update [duplicate]Javascript变量不更新[重复]
【发布时间】:2016-12-14 09:14:48
【问题描述】:

我有以下代码:

    function showDatePicker(){
        var isEnabled=#{bean.isEnabled()};
        if (isEnabled){
            jQueryForDatepicker(".calendar").datepicker('enable');
            jQueryForDatepicker(".calendar").datepicker({
                  changeMonth: true,
                  changeYear: true,
                  showOn: "button",  
                  dateFormat:'yy-mm-dd',
                  buttonImage: "../resources/calendar.gif",      
                  buttonImageOnly: true,      
                  buttonText: "Select date",
                  beforeShow: function (input, inst) {
                      var rect = input.getBoundingClientRect();
                        setTimeout(function () {
                            inst.dpDiv.css({ marginTop: -input.offsetHeight + '10' , marginLeft: input.offsetWidth + '10' });
                        }, 0);
                  }
          });
        } else {
            jQueryForDatepicker(".calendar").datepicker('disable');
        }
    }       

该函数是从一个 ajax 事件中调用的,该事件与一个下拉列表相关联。下拉列表包含“启用”、“禁用”值,并设置托管 bean 中的属性。我的问题是,在 javascript 函数中,var isEnabled 仅在页面加载时设置。最初设置为 false,之后,如果我更改下拉列表中的值,即使我的 bean 发送回正确的值,javascript 中的变量也不会更新。因此,如果它以 false 值加载,即使它应该更新为 true,它也会保持这种状态,反之亦然。

【问题讨论】:

    标签: javascript jsf datepicker


    【解决方案1】:

    我认为你这样做完全错误。此代码仅在页面加载时触发。如果您不刷新页面或在 dom 中再次添加该脚本,则无法在客户端上使用它。您应该寻求完全不同的解决方案。

    你应该做的是给函数添加js回调。

    【讨论】:

    • 每次下拉改变都会触发函数,有ajax调用,唯一的问题是变量停留在原来读取的方式。没有更新..
    • 那是因为您是从后端或服务器声明它。而是从前端声明它:)
    【解决方案2】:

    isEnabled 变量正在绑定您的 bean,但此脚本不会再次运行。更改 bean 值后再次尝试调用函数 showDatePicker()。 我认为您应该使用原型创建一个函数 showDatePicker(isEnabled ){...}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多