提问者:小点点

JavaScript搜索读取属性“submit”错误


我得到了这个错误:

?ShiftType=4:49未捕获的TypeError:无法在success(?Type=4:49)success@?Type=4:49处读取未定义的属性“submit”

这是我的JavaScript

<script type="text/javascript">
      <!--
      

      function addLatlng()
      { 
        
        var options = {
          enableHighAccuracy: true,
          timeout: 5000,
          maximumAge: 0
        };

        function success(pos) 
        {
          

          var crd = pos.coords;
          
          console.log(crd.latitude);
          console.log('Your current position is:');
          console.log(`Latitude : ${crd.latitude}`);
          console.log(`Longitude: ${crd.longitude}`);
          console.log(`More or less ${crd.accuracy} meters.`);
          document.getElementById('latlng').value = crd.latitude + "-" + crd.longitude;
          document.openShiftForm.submit();
        };

        function error(err) {
          console.warn(`ERROR(${err.code}): ${err.message}`);
          document.getElementById('latlng').value = "ERROR" + "-" + err.message;
          document.openShiftForm.submit();
        };

        
        navigator.geolocation.getCurrentPosition(success, error, options);
        
      }
      // -->
      </script>

这是HTML部分:

echo '<form action="" method="post" enctype="multipart/form-data" name="openShiftForm">';
echo '<input type="hidden" id="latlng" name="latlng" value="">';
echo '<input type="hidden" name="action" value="openShift">';
echo '<button type="button"  onclick="addLatlng()" class="btn btn-danger btn-lg" name="openShift" value="1">'.$shiftTypeArray[intval($_SESSION['openShiftType'])]['name'].' open shift</button>';
echo '</form>'; 

有人能帮忙吗?


共2个答案

匿名用户

再见,尝试添加一个id到表单,然后submit()它。 像这样:

  echo '<form action="" id="myform" method="post" enctype="multipart/form-data" name="openShiftForm">';
  echo '<input type="hidden" id="latlng" name="latlng" value="">';
  echo '<input type="hidden" name="action" value="openShift">';
  echo '<button type="button"  onclick="addLatlng()" class="btn btn-danger btn-lg" name="openShift" value="1">'.$shiftTypeArray[intval($_SESSION['openShiftType'])]['name'].' open shift</button>';
  echo '</form>'; 
  
  <script type="text/javascript">
  <!--
  

  function addLatlng()
  { 
    
    var options = {
      enableHighAccuracy: true,
      timeout: 5000,
      maximumAge: 0
    };

    function success(pos) 
    {
      

      var crd = pos.coords;
      
      console.log(crd.latitude);
      console.log('Your current position is:');
      console.log(`Latitude : ${crd.latitude}`);
      console.log(`Longitude: ${crd.longitude}`);
      console.log(`More or less ${crd.accuracy} meters.`);
      document.getElementById('latlng').value = crd.latitude + "-" + crd.longitude;
      document.getElementById('myform').submit();
    };

    function error(err) {
      console.warn(`ERROR(${err.code}): ${err.message}`);
      document.getElementById('latlng').value = "ERROR" + "-" + err.message;
      document.getElementById('myform').submit();
    };

    
    navigator.geolocation.getCurrentPosition(success, error, options);
    
  }
  // -->
  </script>

匿名用户

所以在调用的success函数中

document.openShiftForm.submit()

文档确实包含表单,但它不会自动添加元素,因此您可以使用点表示法访问这些元素。 因此您不能通过编写类似文档来访问它们。[元素名称]。 这就是您得到错误无法读取未定义的的属性提交的原因,因为OpenShiftForm不存在于顶级文档中。

访问元素的方式是使用document对象提供的一些getter方法。 在这里,您可能可以这样写:

const form = document.getElementById("openShiftForm");

这样做需要在OpenShiftForm的html中向表单元素添加一个ID属性。 一旦您有权访问您调用的表单元素,就拉出您需要的字段,并对它们做您需要做的事情。 您可以在onsuccess函数中执行此操作。

这只是一种方法。 如果您在周围搜索一下,就会发现document对象有许多方法可以用来访问和操作DOM。 更多地熟悉这些方法将帮助您确定要如何设置这些方法。