我已经在这个话题上挣扎了很长一段时间而且它只是不会点击!
我需要将对象传递给&.post
(WordPress处理的AJAX)请求,但我无法弄清楚如何使用常规变量正确地执行此操作;相反,我被迫调用$(文档)并迭代它的DOM元素(非常丑陋和缓慢)。
如何更正此代码,以便我能够将标题变量一直传递到帖子数据,而不是使用$(document).find('#sections_title').val() request
?
请解释如何正确地做到这一点。
(function ($) {
var title = $('#sections_title');
var timeout = 2000;
var delay = (function () {
var timer = 0;
return function (callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
title.keyup(function () {
// i would like to have variable here, that grabs the $(this).val()
// and use this variable to pass to the data
// var value = .......
delay(function () {
$.post(
ajaxurl,
{
'action': 'add_foobar',
'data': $(document).find('#sections_title').val()
// instead I would like:
// 'data': value
},
function(response){
alert('The server responded: ' + response);
}
);
}, timeout);
})();
})(jQuery);
答案 0 :(得分:1)
您可以在window object上明确设置。在浏览器中,全局对象与窗口对象相同,但node.js
等特定环境除外。
(function($) {
window.title = $('#sections_title');
var timeout = 2000;
var delay = (function() {
var timer = 0;
return function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
title.keyup(function() {
delay(function() {
$.post(
ajaxurl, {
'action': 'add_foobar',
'data': window.title
},
function(response) {
alert('The server responded: ' + response);
}
);
}, timeout);
})();
})(jQuery);
答案 1 :(得分:1)
对于您的情况,这应该是最简单的方法。 绑定val作为回调对象。然后在需要使用时将其强制转换为字符串。
delay(function () {
$.post(
ajaxurl,
{
'action': 'add_foobar',
'data': String(this)
// instead I would like:
// 'data': value
},
function(response){
alert('The server responded: ' + response);
}
);
}.bind(Object($(this).val())), timeout);
或者这是完整的代码
(function ($) {
var title = $('#sections_title');
var timeout = 2000;
var delay = (function () {
var timer = 0;
return function (callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
title.keyup(function () {
// i would like to have variable here, that grabs the $(this).val()
// and use this variable to pass to the data
// var value = .......
delay(function () {
$.post(
ajaxurl,
{
'action': 'add_foobar',
'data': String(this)
// instead I would like:
// 'data': value
},
function(response){
alert('The server responded: ' + response);
}
);
}.bind(Object($(this).val())), timeout);
})();
})(jQuery);