jQueryUI 1.9
jQueryUI 1.9 response
ইভেন্টটি স্বতঃসম্পূর্ণ উইজেটকে আশীর্বাদ করেছে , যা কোনও ফলাফল ফিরে না পেয়ে তা সনাক্ত করার জন্য আমরা উত্তোলন করতে পারি:
মেনুটি দেখানোর আগে অনুসন্ধান শেষ হওয়ার পরে ট্রিগারযুক্ত। পরামর্শের ডেটা স্থানীয় হেরফের জন্য দরকারী, যেখানে একটি কাস্টম উত্স বিকল্প কলব্যাক প্রয়োজন হয় না। কোনও অনুসন্ধান শেষ হওয়ার পরে মেনুটি প্রদর্শিত হবে না বা স্বতঃপূরণ অক্ষম থাকলেও এই ইভেন্টটি সর্বদা ট্রিগার হয়।
সুতরাং, এটি মনে রেখে, jQueryUI 1.8 এ আমাদের যে হ্যাকিং করতে হয়েছিল তা প্রতিস্থাপন করা হয়েছে:
$(function() {
$("input").autocomplete({
source: ,
response: function(event, ui) {
if (ui.content.length === 0) {
$("#empty-message").text("No results found");
} else {
$("#empty-message").empty();
}
}
});
});
উদাহরণ: http://jsfiddle.net/andrew whitaker / x5q6Q/
jQueryUI 1.8
আমি jQueryUI API এর সাথে এটি করার সহজ সরল কোনও উপায় খুঁজে পাইনি, তবে আপনি autocomplete._response
নিজের সাথে ফাংশনটি প্রতিস্থাপন করতে পারেন এবং তারপরে ডিফল্ট jQueryUI ফাংশনটি ( স্বতঃসম্পূর্ণ prototype
বস্তুর প্রসারিত করার জন্য আপডেট করা ) কল করতে পারেন :
var __response = $.ui.autocomplete.prototype._response;
$.ui.autocomplete.prototype._response = function(content) {
__response.apply(this, [content]);
this.element.trigger("autocompletesearchcomplete", [content]);
};
এবং তারপরে ইভেন্টের একটি ইভেন্ট হ্যান্ডলারকে আবদ্ধ করুন autocompletesearchcomplete
(বিষয়বস্তু অনুসন্ধানের ফলাফল, একটি অ্যারে):
$("input").bind("autocompletesearchcomplete", function(event, contents) {
$("#results").html(contents.length);
});
এখানে যা চলছে তা হ'ল আপনি স্বতঃপূরণের response
ফাংশনটি একটি চলক ( __response
) এ সংরক্ষণ করছেন এবং তারপরে apply
আবার কল করার জন্য ব্যবহার করছেন । আপনি ডিফল্ট পদ্ধতিতে কল করায় আমি এই পদ্ধতি থেকে কোনও খারাপ প্রভাবের কথা কল্পনা করতে পারি না। যেহেতু আমরা অবজেক্টের প্রোটোটাইপটি পরিবর্তন করছি, এটি সমস্ত স্ব-পরিপূর্ণ উইজেটের জন্য কাজ করবে।
এখানে একটি কার্যকারী উদাহরণ : http://jsfiddle.net/andrew whitaker / VEhyV/
আমার উদাহরণটি ডেটা উত্স হিসাবে স্থানীয় অ্যারে ব্যবহার করে, তবে আমি মনে করি না এটির বিষয়টি বিবেচিত হওয়া উচিত।
আপডেট: আপনি নিজের উইজেটে নতুন কার্যকারিতাটিও গুটিয়ে রাখতে পারেন, ডিফল্ট স্বতঃপূরণ কার্যকারিতা প্রসারিত করে:
$.widget("ui.customautocomplete", $.extend({}, $.ui.autocomplete.prototype, {
_response: function(contents){
$.ui.autocomplete.prototype._response.apply(this, arguments);
$(this.element).trigger("autocompletesearchcomplete", [contents]);
}
}));
থেকে আপনার কল পরিবর্তন করা হচ্ছে .autocomplete({...});
:
$("input").customautocomplete({..});
এবং পরে কাস্টম autocompletesearchcomplete
ইভেন্টে আবদ্ধ হন :
$("input").bind("autocompletesearchcomplete", function(event, contents) {
$("#results").html(contents.length);
});
এখানে একটি উদাহরণ দেখুন : http://jsfiddle.net/andrew whitaker / VBTGJ/
যেহেতু এই প্রশ্ন / উত্তরটি কিছুটা মনোযোগ পেয়েছে, তাই আমি ভেবেছিলাম যে আমি এই উত্তরটি সম্পাদন করার আরও একটি উপায় দিয়ে আপডেট করব। এই পৃষ্ঠাটি সর্বাধিক কার্যকর যখন আপনার পৃষ্ঠায় কেবলমাত্র একটি স্বয়ংসম্পূর্ণ উইজেট রয়েছে। এটি করার এই উপায়টি একটি স্বতঃপূরণ উইজেটে প্রয়োগ করা যেতে পারে যা কোনও প্রত্যন্ত বা স্থানীয় উত্স ব্যবহার করে:
var src = [...];
$("#auto").autocomplete({
source: function (request, response) {
var results = $.ui.autocomplete.filter(src, request.term);
if (!results.length) {
$("#no-results").text("No results found!");
} else {
$("#no-results").empty();
}
response(results);
}
});
এর মধ্যেই if
যেখানে কোনও ফলাফল সনাক্ত না হলে আপনি কার্যকর করার জন্য আপনার কাস্টম যুক্তি স্থাপন করবেন।
উদাহরণ: http://jsfiddle.net/qz29K/
আপনি যদি রিমোট ডেটা উত্স ব্যবহার করে থাকেন তবে এর মতো কিছু বলুন:
$("#auto").autocomplete({
source: "my_remote_src"
});
তারপরে আপনাকে আপনার কোডটি পরিবর্তন করতে হবে যাতে আপনি AJAX কে নিজেকে কল করতে পারেন এবং 0 টি ফলাফল কখন ফিরে আসে তা সনাক্ত করতে পারেন:
$("#auto").autocomplete({
source: function (request, response) {
$.ajax({
url: "my_remote_src",
data: request,
success: function (data) {
response(data);
if (data.length === 0) {
}
},
error: function () {
response([]);
}
});
}
});