这是我第一次没有教程编写jQuery插件。现在(2014年9月28日),jQuery网站不起作用(我不知道为什么),所以我找不到任何资源。
以下是我报告错误的插件的一部分:
$(function($){
$.fn.dialog = function(command, options) {
var opts = $.extend( {}, $.fn.dialog.defaults, options );
//code
$.fn.dialog.handleCancel = function() {
};
$.fn.dialog.handleAccept = function() {
};
return this;
};
$.fn.dialog.defaults = {
// some other props
onCancel: $.fn.dialog.handleCancel(),
onAccept: $.fn.dialog.handleAccept()
};
// code
}(jQuery));
当我调用插件($("#dialog1").dialog(/*..*/)
)时,浏览器控制台会显示以下内容:
Uncaught TypeError: undefined is not a function
该错误与onCancel: $.fn.dialog.handleCancel()
一致。
我如何访问这些方法,它们应该在哪里? (我也希望他们能够访问$(this)
< - 用于对话框本身)
答案 0 :(得分:2)
在调用handleCancel
函数之前,您的handleAccept
和$.fn.dialog
函数未初始化。因此,在设置对话框默认值时,它们是未定义的。
在$.fn.dialog.defaults
之前插入此代码:
$.fn.dialog();
答案 1 :(得分:1)
尝试重新排列片段中的块,添加过滤器,以防止默认情况下调用 handleCancel
和handleAccept
;例如,
(function($){
$.fn.dialog = function(command, options) {
var $el = this;
// access , pass arguments to methods
$.fn.dialog.handleCancel = function(c) {
$el.html(c + "led")
};
$.fn.dialog.handleAccept = function(a) {
$el.html(a + "ed")
};
// call `handleCancel` or `handleAccept` ,
// based on `command`
$.fn.dialog.defaults = {
// some other props
onCancel: command === "cancel"
? $.fn.dialog.handleCancel(command)
: null,
onAccept: command === "accept"
? $.fn.dialog.handleAccept(command)
: null
};
var opts = $.extend( {}, $.fn.dialog.defaults, options );
//code
return this;
};
// code
}(jQuery));
$("button").on("click", function(e) {
$("#result").dialog(e.target.id)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button id="accept">accept</button><button id="cancel">cancel</button><br />
Result: <div id="result"></div>