我正在使用Select2和Ajax来加载远程数据(建议)。
一切正常,但有一个问题:当用户只输入空格(通过按空格键)时- Ajax请求将被发送。
我如何防止这种情况发生?另外,我想在发送之前修剪一下条款。
$(".js-data-example-ajax").select2({
placeholder: "Select... ",
minimumInputLength: 3,
ajax: {
url: "/my-site/tags",
dataType: 'json',
data: function (params) {
return {
q: params.term
};
},
processResults: function (data) {
return {
results: data
};
},
cache: true
}
编辑:
我忘了说我已经尝试过这样的东西:
data: function (params) {
if (params.term.trim().length < 2) {
return;
}
return {
q: $.trim(params.term)
};
},
并且GET (Ajax)请求仍然被发送。
发布于 2016-11-06 08:49:28
您可以使用data
函数检查搜索term
的长度(修剪后),如果长度<3,则返回:
data: function (params) {
if (params.term.trim().length < 3) {
throw false;
}
return {
q: params.term.trim()
};
},
我试图从data
函数内部获取minimumInputLength
的值,但是无法获得,所以您应该将这个数字写两次。
更新
我能够停止请求的唯一方法是在data
函数内部执行throw
异常。我知道这可能不是一个好的选择,但它是有效的。
我还发现了一个关于这个问题的开放标签:https://github.com/select2/select2/issues/1637,所以我想(到目前为止)还没有这样的选择。
发布于 2021-01-13 15:35:24
您可以只重写transport
选项,在验证失败时返回null
,否则返回original function code
这对我很管用。
{
data: function (params) {
return {
q: params.term
};
},
transport: function (params, success, failure) {
if(params.data.q.trim().length < 3) {
return null;
}
//the original function code:
var $request = $.ajax(params);
$request.then(success);
$request.fail(failure);
return $request;
},
}
发布于 2019-06-24 08:57:22
您必须使用自己的函数覆盖传输方法,并对参数执行任何操作,然后决定通过XHR、$.ajax或axios处理请求。
https://stackoverflow.com/questions/40443903
复制相似问题