webForumDet fria alternativet

return value i firefox och modalwindow

JavaScript

6 svar · 537 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#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.

Medlem sedan dec. 20025 483 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?

Medlem sedan jan. 20013 406 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>
Medlem sedan dec. 20025 483 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()
  }
}
Medlem sedan jan. 20013 406 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.

Medlem sedan dec. 20025 483 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>

?

Medlem sedan jan. 20013 406 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!

266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)