JQuery的nyroModal应用报错nyroModalSettings is not a function
nyroModal应用报错
如下:
$.nyroModalSettings is not a function
}, 'css', 'content');
找了半天,也没搞定,最后才找出问题。
Javascript问题出错可真费事儿啊。也难怪所有web应用Javascript出错也是最难搞定的。
google也统计了 最fuck的语言,全球程序员都觉得是Javascript。
报这样的错误有三种原因
原因一:$('.total').click(function(e) 是不能放在$(document).ready(function() { }中的,应该$('.total').click(function(e) 提出来,不要包含在其中
$(document).ready(function() {
$('.total').click(function(e){
e.preventDefault();
$.nyroModalSettings({
background: '#abcdef'
}, 'css', 'content');
//$.nyroModalSettings({bgColor: '#abcdef'});
$.nyroModalSettings({overflow: 'auto'}, 'css', 'content');
var id = $(this).attr("detailid");
//alert(id);
var turl = '/details/querydetails';
$.nyroModalManual({
url: turl,
ajax: {data: "id="+id+"&type=1&level=1&returntype=1&node=200", type: 'post'},
width: 920,
height: 760,
endShowContent: function(elts, settings) {
$('#detailtv').treeview({
prerendered: false,
collapsed: true
});
}
});
});
});
原因二:当前页面在点了其它遮罩时,这个遮罩用了load函数把当前的 nyroModal.js 相关的js文件去掉了,
在恢复到当前页面时,原当前页面的js被替换了。
解决方法是:要对点的遮罩静态页面把相关nyroModal.js 几个文件也要带上,这样才能保证回调到当前页面时js是存在的
问题演示:
$('.yujie').click(function(e){
e.preventDefault();
var turl = $(this).attr('turl');
$("#yujiemod").load(turl, function(){ //这个用了load函数,把当前的js替换了.
dialogtrain = $('#yujiemod').dialog({
autoOpen: false,
position: 'top',
modal: true,
width: 600,
zIndex: 120,
height: 400,
overlay: { backgroundColor: "#000", opacity: 0.5 },
title: '费用修改'
});
dialogtrain.dialog('open');
}
);
return false;
});
先点了
<a href="#" turl="/financeconfirmed/modduefrom/htid/<?php echo $wzcht['id'];?>/mod/1">修改</a>
再点
<td align="center" bgcolor="#FFFFFF" detailid="<?php echo $wzcht['id'];?>" class="total detaillink">YD201012002321</td>
发现 total 关连的页面打不开,还报错
$.nyroModalSettings is not a function
}, 'css', 'content');
解决是
/financeconfirmed/modduefrom.phtml
页面把
nyroModal.js 几个文件加上,以便回调时当前页面依然能使用遮罩文件
原因三:如果上面两种情况都排除了.并且 nyroModal.js 几个文件也都存在当前的文件中
经测试,和上面两种原因无关,但是要这个思路
哪么就应该用parent.(有点符号引用)
$('.total').click(function(e){
e.preventDefault();
$.nyroModalSettings({
background: '#abcdef'
}, 'css', 'content');
$.nyroModalSettings({overflow: 'auto'}, 'css', 'content');
var id = $(this).attr("detailid");
//alert(id);
var turl = '/details/querydetails';
$.nyroModalManual({
url: turl,
ajax: {data: "id="+id+"&type=1&level=1&returntype=1&node=200", type: 'post'},
width: 920,
height: 760,
endShowContent: function(elts, settings) {
$('#detailtv').treeview({
prerendered: false,
collapsed: true
});
}
});
});
改为:
在$.nyroModalSettings前面 修改为parent.$.nyroModalSettings
凡是在回调引用的都要加parent.
比如 下面的#detailtv 也要加上parent.$('#detailtv').treeview
$('.total').click(function(e){
e.preventDefault();
parent.$.nyroModalSettings({
background: '#abcdef'
}, 'css', 'content');
parent.$.nyroModalSettings({overflow: 'auto'}, 'css', 'content');
var id = $(this).attr("detailid");
var turl = '/details/querydetails';
parent.$.nyroModalManual({
url: turl,
ajax: {data: "id="+id+"&type=1&level=1&returntype=1&node=200", type: 'post'},
width: 920,
height: 760,
endShowContent: function(elts, settings) {
parent.$('#detailtv').treeview({
prerendered: false,
collapsed: true
});
}
});
});