【问题标题】:Error '$.type is not a function var obj = $.type( pref );' when submit a form in jqGrid错误'$.type 不是函数 var obj = $.type(pref);'在 jqGrid 中提交表单时
【发布时间】:2013-01-05 12:43:03
【问题描述】:

最近,我正在使用 jqGrid 来表示我的业务数据集,我发现 jqGrid 具有编辑/添加/删除/查看功能,所以我尝试使用它。但是我遇到了一个问题,我尽力解决了。

我按照本网站的示例进行操作:

jQuery("#deptGrid").jqGrid('navGrid', '#deptNav', {
    view : true
}, 
{
    jqModal : true,
    checkOnUpdate : true,
    savekey : [ true, 13 ],
    navkeys : [ true, 38, 40 ],
    checkOnSubmit : true,
    reloadAfterSubmit : false,
    closeOnEscape : true,
    bottominfo : "Fields marked with (*) are required"
}, {
    jqModal : true,
    checkOnUpdate : true,
    savekey : [ true, 13 ],
    navkeys : [ true, 38, 40 ],
    checkOnSubmit : true,
    reloadAfterSubmit : false,
    closeOnEscape : true,
    bottominfo : "Fields marked with (*) are required"
}, {
    reloadAfterSubmit : false,
    jqModal : false,
    closeOnEscape : true
}, {
    closeOnEscape : true
}, {
    navkeys : [ true, 38, 40 ],
    height : 250,
    jqModal : false,
    closeOnEscape : true
});

更新:以下是我的全部内容:

<link rel="stylesheet" type="text/css" href="<%=BASE_PATH %>admin/styles/stylesheet.css" />
<link rel="stylesheet" type="text/css" href="<%=BASE_PATH %>admin/js/jquery/ui/themes/ui-lightness/ui.all.css" />

<link rel="stylesheet" type="text/css" media="screen" href="<%=BASE_PATH %>jqGrid4.4.1/themes/redmond/jquery-ui-1.8.2.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="<%=BASE_PATH %>jqGrid4.4.1/themes/ui.jqgrid.css" />
<link rel="stylesheet" type="text/css" media="screen" href="<%=BASE_PATH %>jqGrid4.4.1/themes/ui.multiselect.css" />

<!-- Including JS -->
<script type="text/javascript" src="<%=BASE_PATH %>admin/js/jquery/jquery.min.js"></script>
<script type="text/javascript" src="<%=BASE_PATH %>admin/js/jquery/jquery-ui-1.8.custom.min.js"></script>
<script type="text/javascript" src="<%=BASE_PATH %>admin/js/jquery/superfish/js/superfish.js"></script>
<script type="text/javascript" src="<%=BASE_PATH %>admin/js/jquery/tab.js"></script>
<script type="text/javascript" src="<%=BASE_PATH %>admin/js/global.js"></script>
<script type="text/javascript" src="<%=BASE_PATH %>admin/js/jquery/thickbox/thickbox.js"></script>
<link  rel="stylesheet" type="text/css" href="<%=BASE_PATH %>admin/js/jquery/thickbox/thickbox.css" />
<script type="text/javascript" src="<%=BASE_PATH %>admin/js/jquery/jquery.form.js"></script>
<script type="text/javascript" src="<%=BASE_PATH %>admin/js/jquery/jquery.validate.js"></script>
<script type="text/javascript" src="<%=BASE_PATH %>admin/js/jquery/jquery-ui-timepicker-addon.js"></script>
<script src="<%=BASE_PATH %>admin/js/jquery/ui/jquery.bgiframe-2.1.2.js" type="text/javascript"></script>
<script src="<%=BASE_PATH %>admin/js/jquery/ui/jquery.ui.core.js" type="text/javascript"></script>
<script src="<%=BASE_PATH %>admin/js/jquery/ui/jquery.ui.widget.js" type="text/javascript"></script>
<script src="<%=BASE_PATH %>admin/js/jquery/ui/jquery.ui.mouse.js" type="text/javascript"></script>
<script src="<%=BASE_PATH %>admin/js/jquery/ui/jquery.ui.button.js" type="text/javascript"></script>
<script src="<%=BASE_PATH %>admin/js/jquery/ui/jquery.ui.draggable.js" type="text/javascript"></script>
<script src="<%=BASE_PATH %>admin/js/jquery/ui/jquery.ui.position.js" type="text/javascript"></script>
<script src="<%=BASE_PATH %>admin/js/jquery/ui/jquery.ui.resizable.js" type="text/javascript"></script>
<script src="<%=BASE_PATH %>admin/js/jquery/ui/jquery.ui.dialog.js" type="text/javascript"></script>
<script src="<%=BASE_PATH %>admin/js/jquery/ui/jquery.effects.core.js" type="text/javascript"></script>
<script src="<%=BASE_PATH %>js/kevinshi.js" type="text/javascript"></script>

<script src="<%=BASE_PATH %>jqGrid4.4.1/js/jquery.jqGrid.src.js" type="text/javascript"></script>
<script src="<%=BASE_PATH %>jqGrid4.4.1/js/i18n/grid.locale-en.js" type="text/javascript"></script>

更新:每当我单击按钮进行编辑/添加/删除时,它总是会在 firebug 中导致错误:

$.type is not a function 
var obj = $.type( pref );

我跟踪到 jqGrid 源代码,这个错误发生在文件 jquery.jqGrid.src.js 的第 52 行,如下所示:

stripPref : function (pref, id) {
var obj = $.type( pref ); // Happened at this line.
if( obj == "string" || obj =="number") {
pref = String(pref);
id = pref !== "" ? String(id).replace(String(pref), "") : id;
}
return id;
}, 

所以,此时此刻,我可以说找到了jQuery.type()方法,但是我已经包含了库jquery.min.js,我很困惑。

【问题讨论】:

  • 你能把代码贴在应该定义类型函数的地方吗?这似乎使用了自定义 jQuery 插件,但您没有明确创建它,因此使其未定义。
  • 就用这个:在 jquery 之后包含

标签: javascript jquery jqgrid grid


【解决方案1】:

在同一模块的实现中多次包含两个 JavaScript 文件是错误的。此外,以正确的顺序包含 JavaScript 文件也很重要。此外,您不应包含任何您不使用的插件。

通常一个用途

i18n/grid.locale-en.js
jquery.jqGrid.src.js

在开发一些解决方案和使用过程中

i18n/grid.locale-en.js
jquery.jqGrid.min.js

在最终解决方案中。见the documentation

应该在任何 jqGrid JavaScript 文件之前包含 jQuery。包括ui.jqgrid.css 和jQuery UI CSS 也是必需的。

如果您仍然有错误,您应该发布发生错误的确切行号jquery.jqGrid.src.js。您应该发布更多您使用的完整 JavaScript 代码。

【讨论】:

  • 非常感谢您的详细回复。我按照您的指示更新问题。请注意 var obj = $.type( pref ); ,这是问题的底部。
  • 如果添加/编辑/删除功能无法在我的开发中发挥作用,我会放弃此解决方案并转向其他人,例如自己开发。再次感谢@Oleg!
  • @BradyChu:我们现在更接近问题的原因,但现在需要知道pref 在案例中的值和类型。此外,很高兴知道stripPref 被调用的位置。此外,您没有包含您使用的 jqGrid 的定义。是否更改了 jqGrid 的 idPrefix 选项的值尤其重要。该选项的默认值为""$.type(pref) 中的 pref 等于 "" 或任何其他字符串应该没有错误。
【解决方案2】:

我刚刚遇到了完全相同的错误消息。我正在发布对我有用的东西,以防它可能对其他人有所帮助。 我在尝试从表单中保存时收到 TypeError: b.type is not a function。 我使用的 jqgrid 版本是 4.4.3,我调用的是旧版本的 jquery (1.4.2)。 使用更新版本的 jquery(在我的例子中是 1.7.2)解决了这个问题。我猜函数 'type' 不在 1.4.2 版本中。

【讨论】:

    【解决方案3】:

    解决了这个问题。只是因为jqGrid不支持jQuery 1.9

    【讨论】:

      猜你喜欢
      • 2019-01-05
      • 2021-09-09
      • 2021-05-07
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      相关资源
      最近更新 更多