webForumDet fria alternativet

return value i firefox och modalwindow

6 svar · 537 visningar · startad av Addeladde

AddeladdeMedlem sedan jan. 20012 997 inlägg
#1

Hej

Jag har en länk som ser ut på följande sätt.

<a onclick="return confirmDelete(...)" href="__dopostback('blbla','')"></a>

Sedan ser javascript koden ut så här:

function modalDialogShow(url,width,height){
  if (window.showModalDialog) {
    var returnValue = window.showModalDialog(url,"","dialogWidth:"+width+"px;dialogHeight:"+(height+42)+"px");
	return returnValue;
  } 
	else {
	  var left = screen.availWidth/2 - width/2;
      var top = screen.availHeight/2 - height/2;
      activeModalWin = window.open(url, "", "width="+width+"px,height="+height+",left="+left+",top="+top+",modal=yes");
  }
} 

function confirmDelete(confirmText, pageTitle, baseURL, eventTarget){
  var returnValue= false;
  returnValue = modalDialogShow(baseURL+'modalpageshow.aspx?page='+escape('confirmDelete.aspx?confirmText='+confirmText)+'&pageTitle='+escape(pageTitle),380,125)
  if(returnValue){
    return true
  }
  return false;
}

function deleteDo(){
  return true;
}

Eftersom Firefox inte hanterar returnValue så i sidan som öppnas i popupfönstret kör du funktionen deleteDo()

Men det funkar inte eftersom firefox redan har fått return false efter som den kör igenom hela confirmDelete funktionen och inte väntar på att fönstret ska stängas först.

Hur löser jag detta? Jag måste få min funktion att returnera true till länken.

Peter SMedlem sedan dec. 20025 484 inlägg
#2

I den översta funktionen returnerar du ett värde om showModalDialog stödjs. Detta stycke körs inte i FF varför else-satsen hoppas in i och där returneras ingenting. Varför inte lägga till return activeModalWin så att modalDialogShow()s returnvärde evalueras till sant?

AddeladdeMedlem sedan jan. 20012 997 inlägg
#3

Problemet är då att den returnerar true direkt men jag vill ju att den ska returnera true om jag trycker på ja knappen i fönstret som öppnas:

Kod på fönstret som öppnas:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<script>
function submitForm(){
  if(window.showModalDialog){
	  if(parent.window.opener)
	    parent.window.opener.deleteDo();
	  else
        returnValue=true;
  }else{
    window.opener.deleteDo();
  }
	self.close();
}
</script>
</head>
<body class="confirmDeletePageBody" onLoad="document.del.Yes.focus();" oncontextmenu="return false" scroll="no">
<form action="" name="del" method="post" onSubmit="submitForm()" style="margin: 0px;">
<table width="350" border="0" cellpadding="0" cellspacing="0">
  <tr> 
    <td width="55" rowspan="2" align="left" valign="top" >
        &nbsp;</td>
    <td height="60" align="left" valign="top">
        Vill du radera?
      <br>
    </td>
  </tr>
  <tr> 
    <td colspan="2" width="200" align="center" valign="top"><input name="Yes" type="submit" class="ButtonW100" id="Yes" value="Ja">
      &nbsp;<input name="No" type="button" class="ButtonW100" id="No" onClick="self.close()" value="Nej"> 
    </td>
  </tr>
</table>
  </form>
</body>
</html>
Peter SMedlem sedan dec. 20025 484 inlägg
#4

Då kan det vara enklare att göra så här

<a onclick="return confirmDelete(...,'{loc:location,href:this.href}')" href="__dopostback('blbla','')"></a>  //a.href-värdet kan ställa till det

function confirmDelete(...,props)
{
  if (window.showModalDialog){
    showModalDialog('...',props,'...');  //du kanske vill använda window.open även här(?)
  } else {
    window.open(...);
  }
  return false;
}

/* popupfönstret */
<form onsubmit="return submitForm()"...

function submitForm()
{
  if (window.showModalDialog){
    window.dialogArguments.loc.href = window.dialogArguments.href;
    window.close();
  } else {
    //ingen dialogArgs här, kanske fånga upp värdet i frågesträngen med unescape()
  }
}
AddeladdeMedlem sedan jan. 20012 997 inlägg
#5

problemet är att på ASP.NET sidor så är det bara ett formulär och det är flera olika formulärfunktioner i den. Den lösning som du redovisar ovan har jag använt mig av på traditionella asp-sidor. Men med postback i asp.net blir det svårare.

Peter SMedlem sedan dec. 20025 484 inlägg
#6

Så resultatet av att klicka på

<a href="_postback(...)"></a>

blir inte detsamma som

<a name="lnk" href="_postback(...)"></a>
<script>location.href = document.links["lnk"].href;</script>

?

AddeladdeMedlem sedan jan. 20012 997 inlägg
#7

sorry jag missförstod lösningen först. Så klart att det ska funka.
Såg onSubmit men det var ju på popupfönstret.

Tack!

Genererad på 385 ms · cache AV · v20260730165559-full.f96bc7eb