Chr*_*ist 8 html javascript model-view-controller jquery yii
我有这个错误信息:
Uncaught InvalidStateError:无法从'HTMLInputElement'读取'selectionDirection'属性:input元素的类型('hidden')不支持选择.
当我检查控制台时,它在此代码中显示错误:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
有人能解释一下这里发生了什么吗?
sif*_*day 14
在HTML的某个地方,你有一个<input type='hidden' />你想要添加到数据obj中的东西,但是你可能正在添加jQuery对象,当jQuery对象在某个地方被字符串化时,这个消息可能会被抛出.鉴于您的大多数数据对象是通过显式调用构建的,.val()我猜测问题在于以下其中一个:
cmd: window.cmd,
id: window.id_hasilsurvey,
id_daftar: window.id_daftar,
id_jadwal: window.id_jadwal,
Run Code Online (Sandbox Code Playgroud)
尝试评论那些,看看你的错误是否消失.如果确实如此,则可以通过添加.val()到有问题的行的末尾来解决问题.
编辑和扩展
(2015年4月9日)自从我写这篇文章以来,这个答案已经有3个赞成,所有这些都是及时传播的,所以我猜其他人都会遇到这个错误并找到答案,所以这里有一个更为一般性的解释来帮助人们.
如果将表示隐藏输入的jQuery对象添加到JS对象,然后尝试将该JS对象序列化为JSON,则会引发此错误.
演示以最简单的形式再现错误:
http://jsfiddle.net/ptugva6t/2/
使用此HTML:
<input type="hidden" id="test1" value="test1_val" />
Run Code Online (Sandbox Code Playgroud)
#test1如果我们使用这个JS,那么会触发错误:
$(document).ready(function() {
var data = {
test1: $("#test1")
}
JSON.stringify(data)
});
Run Code Online (Sandbox Code Playgroud)
这样就可以了:
$(document).ready(function() {
var data = {
test1: $("#test1").val()
}
JSON.stringify(data)
});
Run Code Online (Sandbox Code Playgroud)
然而,如果您使用文本输入,则不会遇到此错误,但由于您尝试序列化的对象的复杂性,您可能会遇到其他序列化错误!
UPDATE
(2016年9月7日)看起来这只是一个Chrome错误,并且已在最近的Chrome更新中得到修复.Chrome 52中现在没有任何错误,你可以JSON.stringify一个jquery对象没有问题.
Firefox也行.Safari 9.1.1仍然会抛出错误 - JSON.stringify上的TypeError可以通过添加.val()来修复
因此,有一个迷你项目,找到Chrome错误报告及其修复程序,并将其报告给Safari.