2009-06-03 68 views
14

爲什麼不能正常工作?LinkBut​​ton不會在點擊()上調用

<script src="Scripts/jquery-1.3.2.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $('.myButton').click(); 
     }); 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:LinkButton id="ttt" runat="server" PostBackUrl="~/Default.aspx" CssClass="myButton">Click</asp:LinkButton> 
    </div> 
    </form> 

回答

35

你想提交表單,或添加Click事件用這個? 你的鏈接按鈕轉換爲

<a id="ttt" class="myButton" href="javascript:WebForm_DoPos[...]">Click</a> 

,所以它沒有在點擊的JavaScript。因此,.click();什麼都不做。
我沒有測試它,但也許這將工作:

eval($('.myButton').attr('href')); 
1

您需要的時候點擊事件引發

$(document).ready(function() { 
     $('.myButton', '#form1') 
      .click(function() { 
       /* 
        Your code to run when Click event is raised. 
        In this case, something like window.location = "http://..."      
        This can be an anonymous or named function 
       */ 
       return false; // This is required as you have set a PostbackUrl 
           // on the LinkButton which will post the form 
           // to the specified URL 
      }); 
    }); 

我已經測試以上ASP.NET 3.5和它的作品如預期分配事件處理程序來火。

Linkbutton上還有OnClientClick屬性,它指定客戶端腳本在引發click事件時運行。

我可以問你想達到什麼嗎?

+0

謝謝,但沒有嘗試that..that不起作用 – Hitz 2009-06-03 06:53:26

+0

它的工作,你需要執行的功能有所行動。你是通過AJAX添加linkbutton還是在Page加載之後? – 2009-06-03 07:02:24

+0

是否正確引用了jQuery框架?你可以通過嘗試$(document).ready(function(){alert(「Hello」);}); – 2009-06-03 07:09:03

0

單擊事件處理程序必須實際執行一個操作。試試這個:

$(function() { 
    $('.myButton').click(function() { alert('Hello!'); }); 
}); 
0

你需要給LinkBut​​ton的一個的CssClass =「myButton的」,然後在上面

$(document).ready(function() { 
     $('.myButton').click(function(){ 
      alert("hello thar"); 
     }); 
    }); 
0

這是一個艱難的一個。據我瞭解,你想模仿在JavaScript代碼中點擊按鈕的行爲。問題是ASP.NET向onclick處理程序添加了一些奇特的JavaScript代碼。

在jQuery中手動觸發事件時,只會執行由jQuery添加的事件代碼,而不會執行onclick屬性或href屬性中的JavaScript。所以這個想法是創建一個新的事件處理程序,它將執行在屬性中定義的原始JavaScript。

什麼我會建議尚未經過測試,但我給它一個鏡頭:

$(document).ready(function() { 

// redefine the event 
$(".myButton").click(function() { 
    var href = $(this).attr("href"); 

    if (href.substr(0,10) == "javascript:") { 
     new Function(href.substr(10)).call(this); 
     // this will make sure that "this" is 
     // correctly set when evaluating the javascript 
     // code 
    } else { 
     window.location = href; 
    } 

    return false; 
}); 

// this will fire the click: 

$(".myButton").click(); 

}); 
0

只是爲了澄清,只有火狐從這個問題受到影響。見http://www.devtoolshed.com/content/fix-firefox-click-event-issue。在FireFox中,anchor(a)標籤沒有click()函數以允許JavaScript代碼直接模擬點擊事件。他們允許您映射錨點標記的點擊事件,只是不要用click()函數來模擬它。

幸運的是,ASP.NET將JavaScript回發代碼放入href屬性中,您可以在其中獲取它並在其上運行eval。 (或者只是調用window.location.href = document.GetElementById('LinkBut​​ton1')。href;)。

或者,您可以調用__doPostBack('LinkBut​​ton1');注意'LinkBut​​ton1'應該被LinkBut​​ton的ClientID/UniqueID取代以處理命名容器,例如, UserControls,MasterPages等。

喬丹麗格

3

如果需要的LinkBut​​ton的OnClick服務器端事件,火災,你需要使用__doPostBack(的eventTarget,eventArgument)。

例如:

<asp:LinkButton ID="btnMyButton" runat="Server" OnClick="Button_Click" /> 

<script type="text/javascript"> 

function onMyClientClick(){ 
    //do some client side stuff 

    //'click' the link button, form will post, Button_Click will fire on back-end 
    //that's two underscores 
    __doPostBack('<%=btnMyButton.UniqueID%>', ''); //the second parameter is required and superfluous, just use blank 
} 

</script> 
10

觸發( '點擊')觸發jQuery的單擊事件監聽器.NET是不是迷上了。你可以只觸發JavaScript的點擊事件,這將去(或者在這種情況下運行)什麼是在href屬性:

$('.myButton')[0].click(); 

($('.myButton').length ? $('.myButton') : $('<a/>'))[0].click(); 

如果你不知道該按鈕是怎麼回事出現在頁面上。

相關問題