`
skyfen
  • 浏览: 177018 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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="#" class="yujie" 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
});
}
    });    
});
             
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics