在jQuery中调用ajax后如何更新样式?
我添加了动态输入字段,如下所示:在jQuery中调用ajax后如何更新样式?,jquery,ajax,css-selectors,Jquery,Ajax,Css Selectors,我添加了动态输入字段,如下所示: <input id="person__1_badge_number" class="number" type="text" size="12" name="person[][1][badge][number]"/> 而且它没有将“make_it_red”类添加到我的输入字段中(我还尝试了html(“foo”)和其他东西,但它也不起作用)。我认为这是因为我在其他函数中运行$(这个),但我不知道如何处理它。 $(this).val()工作正常,我也得到
<input id="person__1_badge_number" class="number" type="text" size="12" name="person[][1][badge][number]"/>
而且它没有将“make_it_red”类添加到我的输入字段中(我还尝试了html(“foo”)和其他东西,但它也不起作用)。我认为这是因为我在其他函数中运行$(这个),但我不知道如何处理它。
$(this).val()工作正常,我也得到了正确的响应(警报(数据))。有人能帮忙吗?您可以通过id引用元素:
$('#person__1_badge_number').addClass('make_it_red');
此外,这取决于您动态插入元素的方式,例如,如果您只是将元素作为字符串附加到某个div,那么它可能不会绑定到DOM
编辑:您可以从绑定中获取元素ID,并在回调中构建选择器:
function please_rebind() {
$('.number').bind("change", function() {
var elementId = this.id;
$.post('/registration/sell/check_badge_number', { number: $(this).val() },
function(data) {
$('#' + elementId).addClass('make_it_red');
alert(data);
}, "html");
});
}
我认为在回调之后,对$(this)的引用丢失了。试着这样做:
function please_rebind() {
$('.number').bind("change", function() {
var that = $(this);
$.post('/registration/sell/check_badge_number', { number: $(this).val() },
function(data) {
that.addClass('make_it_red');
}, "html");
});
}
只是想在$的回调中添加“this”。post指的是给定ajax请求的选项。这是JS中反复出现的难题之一,“this”的波动性。只要记住在定义回调时使用这个技巧。当然,这会使函数成为一个完整的闭包,IE开发人员认为这是一种“糟糕的做法”。在这些情况下,他们更愿意让JScript不起作用。
function please_rebind() {
$('.number').bind("change", function() {
var that = $(this);
$.post('/registration/sell/check_badge_number', { number: $(this).val() },
function(data) {
that.addClass('make_it_red');
}, "html");
});
}