【问题标题】:How to call same function from different places using different parameters in javascript and still retain old values of variables of that function?如何在 javascript 中使用不同的参数从不同的地方调用相同的函数,并且仍然保留该函数变量的旧值?
【发布时间】:2017-09-05 00:32:39
【问题描述】:

我的地理定位程序中有以下代码。

当用户允许设备获取地理位置时,geolocation() 函数被调用,geolocation 函数再次使用position 对象传播successPosition 函数,该对象提供纬度和经度。在successPosition 函数中,我还需要另一个名为btype(血型)的变量,因为我正在开发一个程序来查找最近的献血者。

所以过去我尝试使用 javascript prompt 方法询问用户要搜索哪种血型,但使用该方法用户必须手动输入血型,但我想要的是让用户从下拉列表中选择类型。但是如果我创建一个表单并询问用户类型并将对象传递给SuccessPosition 函数,position 对象变得未定义 - 这是因为这次我们只传递了btype 而我们没有position。当position 对象被传递时,另一个变量btype 是未定义的。

请告诉我解决问题的最佳方法是什么。

geolocation: function() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(this.successPosition, this.failurePosition, {
      enableHighAccuracy: true,
      timeout: 3000,
      maximumAge: 4000
    });

  } else {
    return (false);
  }
},
successPosition: function(position) {
  self.latitude = position.coords.latitude;
  self.longitude = position.coords.longitude;

  //self.btype = btype;

  self.partial_url = ("/users?utf8=✓&longitude=" + (self.longitude) 
                   + "&latitude=" + (self.latitude)
                   + "&btype=" + encodeURIComponent(self.btype));

  window.location = self.partial_url;

}

【问题讨论】:

  • 最好让您的代码适合框的范围,这样查看它的人就不必滚动太多。
  • 您是否将服务用作单例?使用服务应该允许您将 btype 与位置解耦

标签: javascript jquery html angular


【解决方案1】:

您的successPosition 函数不必负责立即设置window.location。我认为在你的情况下最简单的事情是让successPosition 触发允许用户选择他们的血型的表单,并有一个事件监听器绑定到表单元素,它调用类似setWindowLocation 的血型用户选择一个。现在您将获得您的地理位置和血型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多