0
私は自分のjQuery関数を作成して、テーブル内のいくつかの行を並べ替えようとしています。ファンクション内でコールバックを呼び出す
この関数はかなりうまく動作しますが、私は設定オブジェクトで設定できるはずのコールバック関数を呼び出す方法は不明です。これはjQuery関数を作成する方法ですか?コードはここにアクションで見ることができます:http://jsfiddle.net/fcHQh/
機能は次のとおりです。
(function($){
$.fn.reorder = function(options) {
var settings = {
'up': '.up',
'down': '.down',
'timeout': 1000,
'url': '',
'success': null,
'error': null
};
var methods = {
init : function(element) {
$(settings.up + ',' + settings.down).on('click', function (event) {
event.preventDefault();
var row = $(this).parents('tr:first');
if ($(this).is(settings.up)) {
row.insertBefore(row.prev());
} else {
row.insertAfter(row.next());
}
tools.delay(function() { methods.sort(element) }, settings.timeout);
});
},
sort : function(element) {
$(element).find('tr').find('input:hidden').each(function() {
element.priorities.push($(this).val());
});
if (settings.url) {
methods.callback(element);
}
},
callback : function(element) {
// THIS SHOULD ONLY BE FIRED IF CALLBACK IS DEFINED?
$.ajax({
type: 'GET',
url: settings.url,
data: { priorities: element.priorities.join(',') },
success: function() {
// FIRE THE 'settings.success' if its set
},
error: function() {
// FIRE THE 'settings.error' if its set
}
});
}
};
var tools = {
delay : (function() {
var timer = 0;
return function (callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})()
}
return this.each(function() {
if (options) $.extend(settings, options);
this.priorities = [];
methods.init(this);
});
};
})(jQuery);
要旨はということですデフォルトを上書きしたくない場合や、渡されたオプションが上書きされないようにすることもできますが、デフォルトがある場合はコピーを作成することができます。 $ .extendはそれを実現します。 http://api.jquery.com/jQuery.extend/ –
を参照してください。よろしくお願いします。:-) – janhartmann
jQueryプラグインの作成に関する優れた入門書があります:http://docs.jquery.com/Plugins/Authoring –