2011-10-20 35 views
1

最終目標是當按鈕被剪裁併且「top」小於0時,會有一個div「animate」。我想使用按鈕(用於樣式),但是當我這樣做時,它似乎是張貼。這裏是我的按鈕:Make button NOT post

<button id="expcoll" class="expcoll" onclick="expcoll();" runat="server">↓</button> 

這裏是我的javascript:

function expcoll() { 
    var dFilter = document.getElementById("dFilter"); 
    var expcoll = document.getElementById("MainContent_expcoll"); 
    if (dFilter.offsetTop == 0) { 
     $("#dFilter").css({ 'top': -200 }); 
     expcoll.innerHTML = "↓"; 
    } 
    else { 
     $("#dFilter").css({ 'top': 0 }); 
     expcoll.innerHTML = "↑"; 
    } 
} 

任何人都可以提出一個更好的方式或途徑,使其向那裏的按鈕不發佈?如果你對我爲什麼試圖使用按鈕感到好奇,我嘗試過使用mouseenter和mouseleave,但是由於少數文本框打開了jQuery日曆,只要我這樣做,div就會崩潰(但日曆仍然保留) 。然後我在div上做了一個「單擊」功能,但是如果我點擊了文本框,它會關閉(但是日曆保持不變)。如果您需要更多信息,請告訴我。非常感謝你。

+0

爲什麼它'runat =「server」',如果你不想回發? – Oded

+0

我甚至沒有想到這一點。讓我嘗試一下。 – XstreamINsanity

+0

這個語法很奇怪。這是什麼樣的html? – RedX

回答

3

客戶端點擊事件需要返回false中止回發。嘗試添加以下內容:

<button id="expcoll" class="expcoll" onclick="expcoll();return false;" runat="server">↓</button> 

如果可以的話,你應該使用ASP.NET按鈕控件:

<asp:Button ID="Button1" runat="server" OnClientClick="expcoll();return false;" ...> 

編輯

這可能是整潔,如果你只是在返回false (感謝@Jon Hanna):

function expcoll() { 
    var dFilter = document.getElementById("dFilter"); 
    var expcoll = document.getElementById("MainContent_expcoll"); 
    if (dFilter.offsetTop == 0) { 
     $("#dFilter").css({ 'top': -200 }); 
     expcoll.innerHTML = "↓"; 
    } 
    else { 
     $("#dFilter").css({ 'top': 0 }); 
     expcoll.innerHTML = "↑"; 
    } 
    return false; 
} 

<button id="expcoll" class="expcoll" onclick="return expcoll();" runat="server">↓</button> 
+0

非常好,非常感謝。我已經把我的「返回假」;在函數內部而不是之後。 – XstreamINsanity

+0

沒問題。真高興你做到了。 –

+0

如果你想在函數中返回false,那麼你也可以使用'onclick =「return expcoll();」'。在這種情況下,它幾乎與@JamesJohnson的答案相同,但在其他情況下,它會讓函數決定是否允許提交,這在很多情況下可能會有用。 –

0

如果你想要一個客戶端按鈕,不要設置runat="server"

順便給一個函數和元素ID一個名字是不是一個好主意 - JavaScript引擎可能不知道你正試圖調用該函數,而是嘗試調用該元素...

+0

如果我這樣做,它不會讓我使用onclick。 – XstreamINsanity

+0

@XstreamINsanity - 你是什麼意思「它不會讓我」?紅色的波浪曲線?如果是這樣,請忽略它們並試試它。 – Oded

+0

這可能只是Visual Studio,但它說:「Microsoft JScript運行時錯誤:對象不支持此屬性或方法」。但是如果我把runat =「server」放回那裏,它就會工作 - ish(只刷新頁面)。 – XstreamINsanity

0

我不完全確定這個答案,但它值得一試。我認爲你可以在你的javascript onClick()方法的末尾放一個return false;,它會阻止回發。

編輯:你也可以嘗試的OnClientClick()事件

+0

不幸的是,這並沒有奏效。不過謝謝。 – XstreamINsanity

+0

onClientClick允許我在沒有runat =「server」的情況下工作,但它仍然「刷新」了頁面。 – XstreamINsanity

0

如果喲您希望能夠撥打expcoll()您需要從OnClientClick調用它,因爲這是客戶端點擊事件。換句話說,你的標記應該是這樣的:

<asp:button id="expcoll" Text="↓" class="expcoll" onClientclick="expcoll();" OnClick ="EventHandlerForClickOnServerSide" runat="server"></asp:button> 

編輯

更仔細地閱讀,看來你不希望服務器控件。改爲:

<input id="expcoll" class="expcoll" type="button" onclick="expcoll();">↓</input>