Avatar billede Slettet bruger
28. april 2010 - 13:17 Der er 7 kommentarer og
1 løsning

Hvor skal jeg bruge return false;?

Jeg har en knap (btn) i min repeater som igen befinder sig i mit UpdatePanel. Når jeg trykker på knappen skal det lille JavaScript herunder gendanne repeaternes layout (nærmere bestemt skal tabel rækkernes 'class'es gendannes). Scriptet fungere fint nok hvis jeg tilføjer "return false;" i knappens OnClientClick-attribut, men så sker der bare intet i min repeater... *suk* - jeg har prøvet alle på alle mulige måder at bruge 'return false;' i scriptet i stedet uden held - hva' gør jeg forkert...? ~:]

function reLoad() {
    $("#tb-1 tr:even, #tb-2 tr:even").addClass("row");
    $("#tb-1 tr, #tb-2 tr").mouseover(function() {
        $(this).addClass("row-over");
    }).mouseout(function() {
        $(this).removeClass("row-over");
    });
}

<asp:ImageButton ID="btn" runat="server" ToolTip="Rediger" ImageUrl="~/Admin/images/icons/edit.png" CommandArgument="editCommand" CommandName="Action" OnClientClick="reLoad('tb-1');" />
Avatar billede olebole Juniormester
28. april 2010 - 14:34 #1
<ole>

Hmmmm ... det er ofte besværligt, når man lader vanskelligt gennemskuelige libraries/frameworks til at skrive ens kode  :o|

Du kan prøve noget i stil med:
function reLoad() {
    $("#tb-1 tr:even, #tb-2 tr:even").addClass("row");
    $("#tb-1 tr, #tb-2 tr").mouseover(function(e) {
        $(this).addClass("row-over");
        if (e) {
        e.stopPropagation();
        e.preventDefault();
    } else {
            event.cancelBubble = true;
            event.returnValue = false;
    };
    }).mouseout(function(e) {
        if (e) {
        e.stopPropagation();
        e.preventDefault();
    } else {
            event.cancelBubble = true;
            event.returnValue = false;
    };
        $(this).removeClass("row-over");
    });
}


/mvh
</bole>
Avatar billede Slettet bruger
28. april 2010 - 14:43 #2
Jeg kan kun give dig helt ret mht. div. libraries/frameworks. Scriptet ovenover virker desværre ikke anderledes end dét jeg selv forsøgte med... ~:|
Avatar billede olebole Juniormester
29. april 2010 - 00:22 #3
Kan du lægge et link til siden eller et eksempel?
Avatar billede Slettet bruger
29. april 2010 - 08:17 #4
Jeg har sidens kildekode og codebehind her

default.aspx:
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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">
   
    <title>JQuery UI Dialog Demo</title>
   
    <link href="css/ui-lightness/jquery-ui-1.7.2.custom.css" rel="stylesheet" type="text/css" />
    <script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
    <script src="js/jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script>
    <script type="text/javascript">

        $(document).ready(function() {
            //setup new person dialog
            $('#newPerson').dialog({
                autoOpen: false,
                draggable: true,
                title: "Add New Person",
                open: function(type, data) {
                    $(this).parent().appendTo("form");
                }
            });

            //setup edit person dialog
            $('#editPerson').dialog({
                autoOpen: false,
                draggable: true,
                title: "Edit Person",
                open: function(type, data) {
                    $(this).parent().appendTo("form");
                }
            });

            //alt. rows in grid
            $("#tb-1 tr:even, #tb-2 tr:even").addClass("row");
            $("#tb-1 tr, #tb-2 tr").mouseover(function() {
                $(this).addClass("row-over");
            }).mouseout(function() {
                $(this).removeClass("row-over");
            });
        });

        function showDialog(id) {
            $('#' + id).dialog("open");
        }

        function closeDialog(id) {
            $('#' + id).dialog("close");
        }

        function reLoad() {
            //return confirm('Hello!');
            $("#tb-1 tr:even, #tb-2 tr:even").addClass("row");
            $("#tb-1 tr, #tb-2 tr").mouseover(function() {
                $(this).addClass("row-over");
            }).mouseout(function() {
                $(this).removeClass("row-over");
            });
        }
   
    </script>
   
<style type="text/css">
table#tb-1{
    margin:0;
    padding:0;
    border: 1px solid #dbdbdb;
}
thead.th1{
    background:#e9e9e9;
}
th.row{
    font-weight:bold;
    cursor:pointer;   
}
th.row-over{
    background:#e9e9e9;
}
tr.row{
    background:#e9e9e9;
}
tr.row-over{
    background:#fffcce;
}

    </style>
</head>
<body>
    <form id="frmJqueryDialogDemo" runat="server">
        <asp:ScriptManager ID="mainScriptManager" runat="server"></asp:ScriptManager>
        <input id="btnAdd" type="button" onclick="showDialog('newPerson');" value="Add New Person" />
        <hr />
        <asp:UpdatePanel ID="upGrid" UpdateMode="Conditional" runat="server">
        <ContentTemplate>
            <asp:Repeater ID="gvUsers" runat="server" onitemcommand="Action">
                <HeaderTemplate><table id="tb-1" cellpadding="0" cellspacing="0" border="0">
                        <tr>
                            <th>Names</th>
                            <th> </th>
                        </tr>
                    </HeaderTemplate>                   
                    <ItemTemplate>
                        <tr>
                            <td>
                                <asp:Literal ID="Literal1" Text='<%# Eval("Value") %>' runat="server" /></td>
                            <td><asp:ImageButton ID="lbName" CommandArgument='<%# Eval("Key") %>' ImageUrl="~/edit.png" OnClientClick="showDialog('editPerson');" onclick="lbName_Click" runat="server"  /></td>

                        </tr>
                    </ItemTemplate>
                <FooterTemplate></table></FooterTemplate>
            </asp:Repeater>
        </ContentTemplate>
        </asp:UpdatePanel> 
           
        <div id='newPerson'>
            <asp:UpdatePanel ID="upNewUpdatePanel" UpdateMode="Conditional" ChildrenAsTriggers="true" runat="server">
            <ContentTemplate>
                <asp:Label ID="lblNewName" runat="server" AssociatedControlID="txtNewName" Text="Name"></asp:Label>
                <asp:TextBox ID="txtNewName" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="reqName1" ControlToValidate="txtNewName" ValidationGroup="Add" runat="server" ErrorMessage="Name is required"></asp:RequiredFieldValidator>
                <asp:Button ID="btnAddSave" OnClick="btnAddSave_Click" runat="server" Text="Save" />
            </ContentTemplate>
            </asp:UpdatePanel>
        </div>
       
        <div id='editPerson'>
            <asp:UpdatePanel ID="upEditUpdatePanel" UpdateMode="Conditional" ChildrenAsTriggers="true" runat="server">
            <ContentTemplate>     
                <asp:Label ID="lblEditName" runat="server" AssociatedControlID="txtEditName" Text="Name"></asp:Label>
                <asp:TextBox ID="txtEditId" Visible="false" runat="server"></asp:TextBox>
                <asp:TextBox ID="txtEditName" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="reqName2" ControlToValidate="txtEditName" ValidationGroup="Edit" runat="server" ErrorMessage="Name is required"></asp:RequiredFieldValidator>
                <asp:Button ID="btnEditSave" runat="server" Text="Save"
                    onclick="btnEditSave_Click" />
            </ContentTemplate>
            </asp:UpdatePanel>           
        </div>       
    </form>
</body>
</html>

default.aspx.cs:
using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : Page
{
    private Dictionary<Guid, string> Names
    {
        get { return (Dictionary<Guid, string>) ViewState["Names"]; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            /*
            * to keep this sample really simple, we will populate some
            * sample data in a Dictionary and store in the viewstate
            */
            var names = new Dictionary<Guid, string>
                            {
                                {Guid.NewGuid(), "John"},
                                {Guid.NewGuid(), "Smith"},
                                {Guid.NewGuid(), "Arther"},
                                {Guid.NewGuid(), "Hari"}
                            };
            //store the list in the viewstate.
            ViewState.Add("Names", names);

            //init grid
            LoadNames();
        }
    }

    private void LoadNames()
    {
        //databind grid
        gvUsers.DataSource = ViewState["Names"];
        gvUsers.DataBind();
    }

    protected void btnAddSave_Click(object sender, EventArgs e)
    {
        Page.Validate("Add");

        if (Page.IsValid)
        {
            Names.Add(Guid.NewGuid(), txtNewName.Text);
            LoadNames();
            CloseDialog("newPerson");

            //reset
            txtNewName.Text = string.Empty;

            //refresh grid
            upGrid.Update();
        }
    }

    protected void btnEditSave_Click(object sender, EventArgs e)
    {
        Page.Validate("Edit");

        if (Page.IsValid)
        {
            Names[new Guid(txtEditId.Text)] = txtEditName.Text;
            LoadNames();
            CloseDialog("editPerson");

            //reset
            txtEditId.Text = string.Empty;
            txtEditName.Text = string.Empty;

            //refresh grid
            upGrid.Update();
        }
    }

    /// <summary>
    /// Populate the Dialog with the existing name
    /// and update the edit panel
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void lbName_Click(object sender, EventArgs e)
    {
        var editLink = ((ImageButton) sender);
        txtEditId.Text = editLink.CommandArgument;
        txtEditName.Text = Names[new Guid(editLink.CommandArgument)];
        upEditUpdatePanel.Update();
    }


    /// <summary>
    /// Registers client script to close the dialog
    /// </summary>
    /// <param name="dialogId"></param>
    private void CloseDialog(string dialogId)
    {
        string script = string.Format(@"closeDialog('{0}')", dialogId);
        ScriptManager.RegisterClientScriptBlock(this, typeof (Page), UniqueID, script, true);
    }
    protected void Action(object source, RepeaterCommandEventArgs e)
    {

    }
}
Avatar billede olebole Juniormester
29. april 2010 - 09:43 #5
Det hjælper mig ikke så meget. Jeg har brug et link til et 'virkende' eksempel  =)
Avatar billede Slettet bruger
29. april 2010 - 11:15 #6
Prøv at hente kildekoden her:
http://www.robinhansen.dk/JQueryUiDialogDemo%20(2).zip
Avatar billede olebole Juniormester
29. april 2010 - 12:38 #7
Jeg har som sagt brug for et virkende eksempel på nettet. Jeg har ikke tid til selv at sidde og fedte med det  =)
Avatar billede Slettet bruger
02. september 2010 - 13:50 #8
lukker og slukker...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester