JavaScript抛出一个read属性';提交';错误

JavaScript抛出一个read属性';提交';错误,javascript,Javascript,我得到了这个错误: ?shiftType=4:49未捕获类型错误:无法读取未定义的属性“提交” 成功时(?类型=4:49) 成功@?类型=4:49 这是我的JavaScript 这是HTML部分: echo '<form action="" method="post" enctype="multipart/form-data" name="openShiftForm">'; echo '<inp

我得到了这个错误:

?shiftType=4:49未捕获类型错误:无法读取未定义的属性“提交” 成功时(?类型=4:49) 成功@?类型=4:49

这是我的JavaScript


这是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>'; 
echo';
回声';
回声';
回显“”。$shiftTypeArray[intval($_SESSION['openShiftType'])]['name'.'openshift';
回声';

有人能帮忙吗?

Ciao,尝试在表单中添加id,然后
submit()
it。像这样:

  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>
echo';
回声';
回声';
回显“”。$shiftTypeArray[intval($_SESSION['openShiftType'])]['name'.'openshift';
回声';

因此,在success函数中调用

document.openShiftForm.submit()
文档
确实包含表单,但它不会自动添加元素,因此您可以使用点符号访问它们。因此,您无法通过编写类似于
document.[元素名称]
的内容来访问它们。这就是为什么会出现错误,
无法读取未定义的属性submit
,因为
openShiftForm
不存在于文档的顶层

访问元素的方法是使用document对象提供的一些getter方法。在这里,你可能会写下如下内容:

const form = document.getElementById("openShiftForm");
这样做需要在
openShiftForm
的html中向表单元素添加
id
属性。一旦您有权访问您调用的表单元素,就可以拉出您需要的字段,并对它们执行您需要执行的操作。您可以在
onsuccess
函数中执行此操作


这只是一种方法。如果你搜索一下,你会发现
文档
对象有很多方法可以用来访问和操作dom。更加熟悉这些方法将有助于您了解如何设置它。

由于以前的有用答案,我做了一些更改,但仍然不起作用

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.getElementById('openShiftForm').submit();
        };

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

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

HTML

echo';
回声';
回声';
echo'.$schichttypArray[intval($_SESSION['openSchichttyp'])]['name'.'1Schichtö;福宁;
回声';
现在我得到了一个稍微不同的错误:

未捕获的TypeError:成功时无法读取null的属性“submit”


为表单赋予“name”属性并不能使其作为变量可用。但是如何使其可用?Ciao Giovanni,非常感谢您的帮助!我将其更改为:HTML部分:JavaScript部分:document.getElementById('openShiftForm').submit();现在我遇到了这个错误:Uncaught TypeError:在成功时无法读取null的属性'submit',您能再次提供帮助吗?Ciao,由于功能策略将始终禁用地理位置,因此我无法与您共享一个代码段,因此我做了一个测试:继续,复制您的代码并进行更新,然后进行测试。它起作用了!只要做一个检查,让我知道。是的,它工作,它显示我的位置这是我的整个控制台日志与我的应用程序:您当前的位置是:?类型=5:45纬度:53.2063064?类型=5:46经度:8.5153522?类型=5:47或多或少59米?type=5:49未捕获的TypeError:无法在成功时读取null的属性“submit”(.type=5:49)我不知道,您使用的是什么浏览器?google chrome浏览器,但正如我所写的:地图API正在工作Hey Pradeep,非常感谢您的详细回答。我虽然明白了,但还是不行。。我更改了:HTML部分:JavaScript部分:document.getElementById('openShiftForm').submit();现在我得到了这个错误:uncaughtypeerror:在成功时无法读取null的属性'submit',非常感谢您,因为这里不仅仅有一个
submit
函数,您可以调用
表单
元素。这是你必须明确设定的。所以你可以做两件事。1.您可以设置它,也可以设置为2。您只需在代码块中执行需要执行的操作,然后运行该函数。还有,你是如何测试的?我看到你的HTML你只是在运行echo'HTML字符串,你是在终端上运行这个吗?还是在浏览器中?在浏览器中。使用$_POST['latlng']我在提交目的地站点上绘制数据,但是如何通过(或从)成功功能提交表单?我在该表单中没有提交按钮。有必要吗?
echo '<form action="" method="post" enctype="multipart/form-data" name="openShiftForm" id="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">'.$schichttypArray[intval($_SESSION['openSchichttyp'])]['name'].' 1Schicht &ouml;ffnen</button>';
echo '</form>';