jQuery 带有点击事件的自定义插件:提供选项?
jQuery custom plugin with click event: Provide options?
我正在尝试制作我的第一个 jQuery-Plugin,所以请对我温柔一些。
目的是使 div 子元素可投票。单击时应进行投票。
这是我的实际代码:
(function($){
$.fn.makeVotable = function(options) {
var settings = $.extend({
// defaults:
url: "/vote",
}, options );
this.bind("click.makeVotable", function (e) {
var parent = $(this).parent();
var foreign_type = $(parent).attr('data-vote-foreign-type');
var foreign_id = $(parent).attr('data-vote-foreign-id');
var vote_id = $(parent).attr('data-vote-id');
var vote = $(e.target).attr('data-vote-type');
var what;
if($(e.target).is('.voted')) {
what = 'delete';
} else if($(parent).children().hasClass('voted')) {
what = 'update';
} else {
what = 'add';
}
$.post(
settings.url,
{ what: what, foreign_type: foreign_type, foreign_id: foreign_id, vote: vote, vote_id: vote_id }
).done(function( data ) {
$(parent).children().removeClass('voted');
if(what != 'delete') {
$(e.target).addClass('voted');
}
if(what == 'add') {
$(parent).attr('data-vote-id',data.id);
}
}).fail(function() {
/* Heavy error like 500 */
});
});
};
})(jQuery);
$('.votable > i').makeVotable(
url: "{{URL::to('vote')}}", /* laravel way to get the URL */
);
如果我删除 "var settings [...]" 部分并只传递 url 而没有 "url:" 我可以使用 options.url 访问它但是使用这种方法我得到这个错误:
SyntaxError: Unexpected token ':'. Expected ')' to end a argument list.
我做错了什么?
你错过了一些东西(一对 {}
)
$('.votable > i').makeVotable(
{ url: "{{URL::to('vote')}}" }
);
我正在尝试制作我的第一个 jQuery-Plugin,所以请对我温柔一些。
目的是使 div 子元素可投票。单击时应进行投票。
这是我的实际代码:
(function($){
$.fn.makeVotable = function(options) {
var settings = $.extend({
// defaults:
url: "/vote",
}, options );
this.bind("click.makeVotable", function (e) {
var parent = $(this).parent();
var foreign_type = $(parent).attr('data-vote-foreign-type');
var foreign_id = $(parent).attr('data-vote-foreign-id');
var vote_id = $(parent).attr('data-vote-id');
var vote = $(e.target).attr('data-vote-type');
var what;
if($(e.target).is('.voted')) {
what = 'delete';
} else if($(parent).children().hasClass('voted')) {
what = 'update';
} else {
what = 'add';
}
$.post(
settings.url,
{ what: what, foreign_type: foreign_type, foreign_id: foreign_id, vote: vote, vote_id: vote_id }
).done(function( data ) {
$(parent).children().removeClass('voted');
if(what != 'delete') {
$(e.target).addClass('voted');
}
if(what == 'add') {
$(parent).attr('data-vote-id',data.id);
}
}).fail(function() {
/* Heavy error like 500 */
});
});
};
})(jQuery);
$('.votable > i').makeVotable(
url: "{{URL::to('vote')}}", /* laravel way to get the URL */
);
如果我删除 "var settings [...]" 部分并只传递 url 而没有 "url:" 我可以使用 options.url 访问它但是使用这种方法我得到这个错误:
SyntaxError: Unexpected token ':'. Expected ')' to end a argument list.
我做错了什么?
你错过了一些东西(一对 {}
)
$('.votable > i').makeVotable(
{ url: "{{URL::to('vote')}}" }
);