能不能一次转完?

https://jsbin.com/tolodar/edi...

上面这个我特别喜欢,但是一个经纬度要分两次才可以转完,很不方便。
能不能一次转完整。
经纬度用英文逗号隔开。
请老师们帮忙,谢谢。

另外,能不能在input判断输入是否错误:
第一个文本框只能是数字、减号、英文句点和英文逗号。
第二个文本框只能是数字英文句点英文逗号和度分秒的符号。

代码在下面:

 <input type="text" id="input_source" placeholder="113.2115235,28.366555"/>
    <div style="padding: 0 4px;">
      <button id="btn_exec">=></button>
      <br>
      <button id="btn_reexec"><=</button>
    </div>
    <input type="text" id="input_target" placeholder="113°12'39.6”,58°8'336.98"" />

js:

function exec (str, fixed = 1) {
  var num = Number(str)
  if (!num) {
    return ''
  } else {
    var a = Math.floor(num)
    var b = Math.floor((num - a) * 60)
    var c = ((num - a - b / 60) * 3600).toFixed(fixed)
    return a + '°' + b + "'" + c + '"'
  }
}


function reexec (str = '', fixed = 3) {
  var mat = str.match(/^(\d+)°(\d+')?([0-9\.]+")?$/)
  if (!mat) {
    return ''
  } else {
    return parseInt(mat[1], 10)
      + parseInt(mat[2], 10) / 60
      + parseFloat(mat[3]) / 3600
  }
}

btn_exec.addEventListener('click', function () {
  input_target.value = exec(input_source.value)
})
btn_reexec.addEventListener('click', function () {
  input_source.value = reexec(input_target.value)
})
阅读 1.8k
2 个回答
function exec (str, fixed = 1) {
  var strs = str.split(",")
  var result = []
  for(var i=0;i<strs.length;i++){
    var num = Number(strs[i])
    if (num) {
      var a = Math.floor(num)
      var b = Math.floor((num - a) * 60)
      var c = ((num - a - b / 60) * 3600).toFixed(fixed)
      result.push(a + '°' + b + "'" + c + '"')
    }
  }
  return result.join(',')
}

function reexec (str = '', fixed = 3) {
    var strs = str.split(",")
    var result = []
    for(var i=0;i<strs.length;i++){
        var mat = strs[i].match(/^(\d+)°(\d+')?([0-9\.]+")?$/)
        if (mat) {
            result.push(parseInt(mat[1], 10)
            + parseInt(mat[2], 10) / 60
            + parseFloat(mat[3]) / 3600)
        }
    }
    return result.join(',')
}

btn_exec.addEventListener('click', function () {
    if(input_source.value.match(/[^0-9-.,]/)){
        alert("输入格式不正确")
        return
    }
    input_target.value = exec(input_source.value)
})
btn_reexec.addEventListener('click', function () {
    if(input_target.value.match(/[^0-9.,°'"]/)){
        alert("输入格式不正确")
        return
    }
    input_source.value = reexec(input_target.value)

})
input_target.addEventListener('blur',function(){
    //直接去掉非法字符
    //input_target.value = input_target.value.replace(/[^0-9.,°'"]/,'')
    //只想判断的话
    if(input_target.value.match(/[^0-9.,°'"]/)){
        alert("输入格式不正确")
    }
})
input_source.addEventListener('blur',function(){
    //直接去掉非法字符
    //input_source.value = input_source.value.replace(/[^0-9-.,]/,'')
    //只想判断的话
    if(input_source.value.match(/[^0-9-.,]/)){
        alert("输入格式不正确")
    }
})

先处理一下,在合并就好了

btn_exec.addEventListener('click', function () {
  input_target.value = input_source.value
    .split(',')
    .map(exec)
    .join(',')
})
btn_reexec.addEventListener('click', function () {
  input_source.value = input_target.value
    .split(',')
    .map(s => `${reexec(s)}`)
    .join(',')
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题