我正在做一个项目,我们正在尝试实现一个叫做Footable的jQuery插件。它的工作方式是对jQuery选择的表调用函数.footable()。当我试图调用这个函数时,我得到了一个类型错误:未定义的不是一个函数。
我们在这个项目中也使用了prototypejs,所以一开始我认为问题是$.()而不是jQuery.(),事实也的确如此。我进入并更改了$。(改为jQuery,希望它能解决问题,但我仍然无法调用.footable()。
您还应该知道,我正在从Iframe加载footble.js。我不确定这是否会造成任何问题。
我不确定下一步该怎么做。任何建议都是值得感谢的。
提前感谢
更新1
我已经尝试在控制台中输入以下代码
var $j = jQuery.noConflict();
$j('<table></table>').footable();在成功加载footable的环境中,对象与footable类一起返回。在我的环境中,我得到一个"TypeError:未定义的不是一个函数“。
发布于 2014-06-27 21:33:54
确保先加载jQuery,然后加载footable和$是来自jquery的别名,这样就不会有问题,您可以使用$()或jQuery()
根据您的问题,您应该使用$()或jQuery(),而不是$.()或jQuery。()
发布于 2014-07-01 04:00:22
我认为你在正确的道路上有一个冲突。
下面是一个演示这个问题的例子:http://plnkr.co/edit/2sR7F2W0QGJAcXxgez14
如果JQuery仍然被$引用,而你添加了对Prototype的引用,你会看到Footable停止工作。如果您使用Footable NoConflict,然后使用它而不是$,那么Footable将再次按预期开始工作。
下面是我定义脚本的地方:
<head>
<link data-require="bootstrap-css@3.0.2" data-semver="3.0.2" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css" />
<link data-require="jqueryui@*" data-semver="1.10.0" rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.0/css/smoothness/jquery-ui-1.10.0.custom.min.css" />
<link rel="stylesheet" href="footable.core.css" />
<script data-require="jquery@*" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script data-require="jqueryui@*" data-semver="1.10.0" src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.0/jquery-ui.js"></script>
<script data-require="bootstrap@*" data-semver="3.0.2" src="//netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js"></script>
<script>var $j = jQuery.noConflict();</script>
<script src="footable.js"></script>
<script src="footable.filter.js"></script>
<script data-require="prototype@*" data-semver="1.7.1+0" src="//cdnjs.cloudflare.com/ajax/libs/prototype/1.7.1.0/prototype.js"></script>
</head>然后,当我使用JQuery并调用footable()时:
$j(function() {
window.footable.options.filter.filterFunction = function(index) {
var $t = $j(this),
$table = $t.parents('table:first'),
filter = $table.data('current-filter').toUpperCase(),
columns = $t.find('td');
var regEx = new RegExp("\\b" + filter + "\\b");
var result = false;
for (i = 0; i < columns.length; i++) {
var text = $j(columns[i]).text();
result = regEx.test(text.toUpperCase());
if (result === true)
break;
if (!$table.data('filter-text-only')) {
text = $j(columns[i]).data("value");
if (text)
result = regEx.test(text.toString().toUpperCase());
}
if (result === true)
break;
}
return result;
};
$j('table').footable().bind('footable_filtering', function(e) {
var selected = $j('.filter-status').find(':selected').text();
if (selected && selected.length > 0) {
e.filter += (e.filter && e.filter.length > 0) ? ' ' + selected : selected;
e.clear = !e.filter;
}
});
}如果你想继续使用$ jquery,你可以这样做:(jQuery and prototype.js conflict, how to keep jQuery as $?)
(function($) {
$('table').footable();
})(jQuery);https://stackoverflow.com/questions/24453039
复制相似问题