无法获取未定义或空引用的属性

时间:2012-12-29 16:55:42

标签: javascript jquery internet-explorer

这与我的上一个问题相似,但问题不同。我为我的所有javascript函数使用单独的javascript文件。该文件由我的主窗口调用,并且也由我的子窗口在单独的实例中调用。我的代码适用于除IE 9和10之外的所有浏览器。我还没有测试过早期版本的IE。

IE表示违规行是window.opener.savetoparent($targetval);我之前的代码是opener.savetoparent($targetval);,在此之前我只是直接从孩子那里对父母进行了更改。我已经进入IE并启用了保护模式,如另一篇文章所示,行为没有变化。 Savetoparent()可供孩子和父母使用,因此我必须使用opener来调用它,以便在父母中运行。

我得到的错误是:Unable to get property 'savetoparent' of undefined or null reference.以下是代码:

function saveandclose($wintype, $propid) {

switch($wintype) {
    case 'ccdetail':
        var $targetval = $('#cc-total').val();
        var $fieldname = 'closingcoststotal';
        break;
}

window.opener.savetoparent($targetval);
closewindow();
}

父母的安全功能是:

function savetoparent($targetval) {
    $('#' + $parentloc).val($targetval);
    var $name = $('#' + $parentloc).attr("name");
    var $rawtargetval = jsstrtonum($targetval);
    processrvsave($propertyid, $name, $rawtargetval);   
    calcrvtotals();
}

您可以获得的任何亮点都将非常感激。

窗口像这样启动

if(window.showModalDialog) { 
  window.showModalDialog($childname + '.php?ploc=' + $parentloc + '&propid=' + $propid, '', 'dialogWidth: ' + $winwidth + 'px; dialogHeight: ' + $winheight + 'px;') 
} 
else { 
  window.open($childname + '.php?ploc=' + $parentloc + '&propid=' + $propid, '', 'width=' + $winwidth + ', height=' + $winheight + ', modal=yes'); 
} 

1 个答案:

答案 0 :(得分:2)

showModalDialog中没有开场白。使用returnValue

多年来,window.open上还没有模态参数..

以下是如何使用returnValue

if(window.showModalDialog) { 
  $targetval = window.showModalDialog($childname + '.php?ploc=' + $parentloc + '&propid=' + $propid, 
    window,
    'dialogWidth: ' + $winwidth + 'px; dialogHeight: ' + $winheight + 'px;'))
  if(targetval) savetoparent($targetval);
} 
else { 
  window.open($childname + '.php?ploc=' + $parentloc + '&propid=' + $propid, '', 'width=' + $winwidth + ', height=' + $winheight + ', modal=yes'); 
} 

然后

function saveandclose($wintype, $propid) {
  var $targetval ="";
  switch($wintype) {
    case 'ccdetail':
      $targetval = $('#cc-total').val();
      // var $fieldname = 'closingcoststotal'; I do not see this used anywhere
      break;
  }

  if (window.opener) window.opener.savetoparent($targetval);
  else returnValue = $targetval;
  closewindow();
}