我得到了这个错误:
?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>';
有人能帮忙吗?
再见,尝试添加一个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。 更多地熟悉这些方法将帮助您确定要如何设置这些方法。