TypeError:' undefined'不仅仅是在Safari中使用Tablesorter的函数

时间:2014-03-21 22:20:20

标签: javascript jquery safari tablesorter

只有在safari中我才会收到错误:

TypeError:undefined不是一个函数(评估' $(" table")。tablesorter')

在所有其他浏览器中它都有效。 这是我的javascript代码,我把头文件推到了jquery和tablesorter javascript的脚本中。 那么我该如何解决这个问题呢?为什么它只在Safari中而不在任何其他浏览器中?

 <script>

$(function() {

  // call the tablesorter plugin
$("table").tablesorter({
    theme : 'jui',
    headerTemplate : '{content}{icon}',
    // hidden filter input/selects will resize the columns, so try to minimize the 
          etc

4 个答案:

答案 0 :(得分:4)

当jQuery加载两次时,在两个副本之间加载的任何脚本都与第一个jQuery副本(ref)相关联:

<script src="jquery-copy1.js"></script>
<script src="myPluginExtendedFromJQ1.js"></script>

<script src="jquery-copy2.js"></script>
<script src="myPluginExtendedFromJQ2.js"></script>

<script>
// all of the jQuery's below are associated with jquery-copy2
jQuery(function(){
  // no problems
  jQuery('#demo-x').myPluginExtendedFromJQ2();

  // error: myPluginAttachedTOJQ1 is undefined
  jQuery('#demo-y').myPluginExtendedFromJQ1();
});
</script>

因此,一旦调用了文档就绪函数,内部的jQuery调用将引用已加载的第二个jQuery副本。

如果这种情况不可避免,那么你需要定义一个与第一个副本相关的变量:

<script src="jquery-copy1.js"></script>
<script>var $jq1 = jQuery.noConflict();</script>
<script src="myPluginExtendedFromJQ1.js"></script>

<script src="jquery-copy2.js"></script>
<script src="myPluginExtendedFromJQ2.js"></script>

<!-- other stuff -->
<script>
// lets call plugins attached to the first copy of jQuery
// document ready can be called on either version $(function(){ ... })
jQuery(function(){
  // no problems
  jQuery('#demo-x').myPluginExtendedFromJQ2();

  // target first copy of jQuery
  $jq1('#demo-y').myPluginAttachedToJQ1();
});
</script>

有关详细信息,请参阅this jQuery forum post

此外,我会将此问题报告给您的网络托管服务商,因为他们应该在加载之前检查jQuery是否已经存在。

答案 1 :(得分:4)

就我而言,解决方案是:

1。脚本订单

jquery-1.11.1.js

jquery-latest.js

jquery.tablesorter.js

2。方法.ready(function($){}) - 提供$

非常重要
    jQuery(document).ready(function($){
            $("#tableSort").tablesorter(); 
    });

答案 2 :(得分:1)

此问题是因为您正在定义多个jquery脚本。 我只有这个:

<script src="@Url.Content("~/Scripts/jquery-1.11.3.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.tablesorter.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.tablesorter.pager.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.tablesorter.widgets.js")" type="text/javascript"></script>

一次又一次地出现同样的错误。

然后我意识到错误就是这样!但我正在使用一个定义另一个版本的jquery的Layout。 更改布局中的定义后,错误消失了。

答案 3 :(得分:0)

我也面临同样的问题。在我的情况下,顺序是问题。 添加jquery和tablesorter js的序列很重要。 首先加载jquery然后加载tablesorter。

<script src="/js/jquery-1.11.0.min.js"></script> 
<script src="/js/jquery.tablesorter.min.js"></script>

之前它被写为

<script src="/js/jquery.tablesorter.min.js"></script>
<script src="/js/jquery-1.11.0.min.js"></script>

希望它有所帮助。