我正在尝试在回发期间显示消息栏。我正在使用我在网上找到的jQuery脚本here。一切都很好,但是当jQuery被添加到页面时,我的服务器端事件永远不会被调用。
这是我的按钮代码:
<asp:Button ID="btnGetReport" CssClass="float-left" runat="server"
Text="<%$ Glossary:GetReport %>" OnClick="btnGetReport_Click" />
这是内联脚本:
<script type="text/javascript">
$(document).ready(function () {
$('#<%=btnGetReport.ClientID%>').click(function (event) {
event.preventDefault();
$('#message_bar').displayMessage({
position: 'fixed',
skin: 'modern',
message: 'We are fetching your report. Please wait...',
});
});
});
</script>
这是相关的外部.js文件:
(function( $ ){
$.fn.displayMessage = function(options) {
// Default configuration properties.
var defaults = {
message : 'Error message',
speed : 'fast',
position : 'fixed', // relative, absolute, fixed
autohide : true
}
var options = $.extend( defaults, options );
$(this).slideUp('fast');
$(this).removeClass().empty();
return this.each(function() {
var sticky = (options.sticky == false) ? 'relative' : 'absolute';
$(this).addClass('messagebar-skin-'+options.skin+'_bar').css('position',options.position).css('background-color',options.background);
$(this).append('<div class="messagebar-skin-'+options.skin+'_inner"><span class="messagebar-skin-'+options.skin+'_text"></span></div>').css('color',options.color);
$(this).find('span').html(options.message);
$(this).slideDown(options.speed ,function(){
var parent = ($(this).attr('id')) ? "#"+$(this).attr('id') : "."+$(this).attr('class');
var close_button = ($(this).find('a').attr('id')) ? "#"+$(this).find('a').attr('id') : "."+$(this).find('a').attr('class');
if(options.autohide == true)
{
$(this).delay(2400).fadeOut('slow');
}
$(parent+">div>"+close_button).bind("click", function (event) {
event.preventDefault();
$(parent+">div>"+close_button).animate({"opacity": "hide"}, function(){
$(parent+">div>span").fadeOut("slow").html("");
$(parent+">div>"+close_button).parent().parent().slideUp(options.speed);
});
});
});
});
};
})( jQuery );
我也尝试使用OnClientClick属性调用该函数,但似乎都没有。我查看了其他人们遇到问题的例子,但他们似乎都没有帮助。
任何想法都将不胜感激!
答案 0 :(得分:4)
你有没有尝试过这样简单的事情:
OnClientClick="return YourJavaScriptFunction();"
<asp:Button ID="btnGetReport" CssClass="float-left" runat="server"
Text="<%$ Glossary:GetReport %>" OnClick="btnGetReport_Click"
OnClientClick="return YourJavaScriptFunction();" />
并在JavaScript函数中最后返回true
function YourJavaScriptFunction () {
// your cool stuff
return true;
}
这一行:
OnClientClick="return YourJavaScriptFunction();"
相当于:
$('#<%=btnGetReport.ClientID%>').click(function () {
您的脚本如下所示:
<script type="text/javascript">
function YourJavaScriptFunction (){
$('#message_bar').displayMessage({
position: 'fixed',
skin: 'modern',
message: 'We are fetching your report. Please wait...'
});
// this will prevent the postback, equivalent to: event.preventDefault();
return false;
}
</script>
答案 1 :(得分:1)
试试这个:
<script type="text/javascript">
$(document).ready(function () {
$('#<%=btnGetReport.ClientID%>').click(function (event) {
event.preventDefault();
$('#message_bar').displayMessage({
position: 'fixed',
skin: 'modern',
message: 'We are fetching your report. Please wait...',
});
__doPostBack("btnGetReport", "");
});
});
</script>
如果使用母版页,请尝试:
__doPostBack("ctl00$MainContent$btnGetReport", "");