2010-08-24 68 views
0

我有我的网页上内嵌脚本,例如:JavaScript函数只能使用一次

<script type="text/javascript"> 
    var rootPath = '<%= Url.Content("~/") %>'; 

    $(document).ready(function() { 

     $('#logonStatus').click(function() { loadLoginForm(); }); 
     alert('Document Ready'); 
    }); 

    function loadLoginForm() { 

     if(!serenity.tools.isStyleSheetLoaded('redmond.css')) { 
      $('head').append('<%= Url.StyleTag("Redmond/redmond.css", MediaTypes.Screen) %>'); 
     }    

     if(!serenity.tools.elementExists($('#logonContainer'))) { 
      $.ajax({ 
       async: false, 
       cache: false, 
       datatype: 'html', 
       success: function (data) { $('body').append(data); }, 
       type: 'GET', 
       url: '/Membership/LogOn' 
      }); 
     } 

     $('#logonContainer').dialog({ 
      modal: true,     
      hide: 'slide' 
     }); 
    } 


</script> 

我也是加载自定义JavaScript文件,它的内容是这样:

var serenity = new function() { 

$(document).ready(function() { 

    jQuery.ajaxSetup({ 
     beforeSend: function (xhr) { 
      xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 
     } 
    }); 

}); 

this.tools = new function() { 

    this.isStyleSheetLoaded = function (fileName) { 

     $(document.styleSheets).each(function() { 
      if (this.href.toLowerCase().indexOf(fileName) != -1) { 
       this.isStyleSheetLoaded = true; 
       return; 
      } 
     }); 

     this.isStyleSheetLoaded = false; 
    } 

    this.elementExists = function (element) { 
     this.elementExists = element.length != 0; 
    } 
} 

}

由ajax调用加载的文件只是一个带有包含输入元素的表的div。该文件不包含任何JavaScript。

我的问题是,我第一次调用isStyleSheetLoaded它工作得很好,但文件加载后,对话框显示并关闭我点击链接,触发loadLoginForm函数,但这次它说isStyleSheetLoaded不是一个功能。这显示在所有浏览器中,所以我99%确定这是我的问题,但我不知道它是什么。有人能指点我正确的方向吗?

在此先感谢。

回答

3

我觉得你的问题如下:

你定义一个函数“this.isStyleSheetLoaded =功能(文件名)”,但在他的身上,你overwride这个属性“this.isStyleSheetLoaded = TRUE;”。

所以在你第一次调用isStyleSheetLoaded之后,这个函数会被一个boolen替代。

正确的方式可以是:

this.isStyleSheetLoaded = function (fileName) { 

     $(document.styleSheets).each(function() { 
     if (this.href.toLowerCase().indexOf(fileName) != -1) { 
      return true; 
     } 
     }); 

    return false; 
} 
+0

这是它,太感谢你了。我多年没有接触到JavaScript,并且在返回另一个函数中的值时遇到了问题,并进行了搜索,发现一篇博客说我必须将方法名称设置为值以返回它。非常感谢,只要我能,我会接受你的答案。 – joshlrogers 2010-08-24 13:38:29

+1

+1同样从'elementExists'返回一个值。这不是VBscript! – bobince 2010-08-24 13:39:52

相关问题