我收到了以下错误消息:
未捕获的InvalidStateError:无法读取' selectionDirection'属性来自' HTMLInputElement':输入元素的类型('隐藏')不支持选择。
当我检查控制台时,它在此代码中显示错误:
function simpan() {
$.ajax({
url: 'app/tblhasilsurvey/simpan',
type: 'post',
async: false,
data: {
cmd: window.cmd,
id: window.id_hasilsurvey,
id_daftar: window.id_daftar,
id_jadwal: window.id_jadwal,
//tblhasilsurvey_nobasurvey : $("#nomor_ba_survey").val(),
nomor_izin : $("#nomor_izin").val(),
tgl_izin : $("#tgl_izin").val(),
pemilik_izin : $("#pemilik_izin").val(),
lokasi : $("#lokasi").val(),
kodekel : $("#kelurahan").val(),
kodekec : $("#kecamatan").val(),
tblhasilsurvey_tglbasurvey : $("#tgl_ba_survey").val(),
tbldaftarrencanasurvey_koordinat : $("#lattitude_").val()+';'+$("#longitude_").val(), // (lattitude;longitude)
tblhasilsurvey_fungsibangunan : $("#fungsi_bangunan").val(),
tblhasilsurvey_uraianpermasalahan : $("#uraian_permasalahan").val(),
tblizin_id : $("#tblizin_id").val()
},
success: function (data) {
if(data=='success') {
notifikasi('Sukses','Data Berhasil Disimpan', 'success');
//window.location.reload();
} else {
notifikasi('Gagal','Data Gagal Disimpan', 'fail');
}
}
});
if( $("#lattitude_").val() !='' ) window.pos_lat = $("#lattitude_").val(); // jika koordinat terisi maka update posisi lattitude
if( $("#longitude_").val() !='' ) window.pos_long = $("#longitude_").val(); // jika koordinat terisi maka update posisi longitude
$("#peta-lokasi").slideDown(1000);
initialize();
$("html, body").animate({ scrollTop: $(document).height() }, 2500);
return false;
function refresh () {
window.location.reload();
}
}
有人能解释一下这里发生了什么吗?
答案 0 :(得分:14)
HTML中的某个地方有一个<input type='hidden' />
,你试图将其添加到数据对象中,但是你可能正在添加jQuery对象,当jQuery对象在某处被字符串化时,可能会抛出此消息。鉴于您的大多数数据对象是通过显式调用.val()
构建的,我猜测问题在于其中一个:
cmd: window.cmd,
id: window.id_hasilsurvey,
id_daftar: window.id_daftar,
id_jadwal: window.id_jadwal,
尝试对这些内容进行评论,看看你的错误是否消失了。如果确实如此,则可以通过将.val()
添加到有问题的行的末尾来解决问题。
编辑和扩展
(2015年4月9日)自从我写这篇文章以来,这个答案已经有3个赞成,所有这些都是及时传播的,所以我想其他人都会遇到这个错误并找到答案,所以这里有一个更一般的解释来帮助人们进行。
如果将表示隐藏输入的jQuery对象添加到JS对象,然后尝试将该JS对象序列化为JSON,则抛出此错误。
演示以最简单的形式再现错误:
http://jsfiddle.net/ptugva6t/2/
使用此HTML:
<input type="hidden" id="test1" value="test1_val" />
如果我们使用这个JS,那么#test1
将触发错误:
$(document).ready(function() {
var data = {
test1: $("#test1")
}
JSON.stringify(data)
});
然而这样就可以了:
$(document).ready(function() {
var data = {
test1: $("#test1").val()
}
JSON.stringify(data)
});
然而,如果您使用文本输入,则不会遇到此错误,但由于您尝试序列化的对象的复杂性,您可能会遇到其他序列化错误!
<强>更新强>
(2016年9月7日)看起来这只是一个Chrome错误,并且已在最近的Chrome更新中得到修复。 Chrome 52中现在没有任何错误,你可以JSON.stringify一个jquery对象没有问题。
Firefox也行。 Safari 9.1.1仍然会抛出错误 - JSON.stringify上的TypeError可以通过添加.val()
来修复所以有一个迷你项目,找到Chrome错误报告及其修复程序,并将其报告给Safari。