JQuery 更改.closest 上下文?
JQuery on change .closest context?
我有一个表单,我可以在其中更改 select 字段时的字段集。
我的 HTML 看起来像这样:
<div class="ajx" id="ajx_1">
<fieldset>
<legend>Inhalt</legend>
<select id="u_article" ...>
...
</fieldset>
</div>
以下 JQuery 适用于所有现代浏览器:
$(".ajx").on("change", function() {
var $this = $(this);
console.log($this)
// ... additional code for understanding what I want to do:
var $form = $('form');
var method = $form.attr("method").toUpperCase();
var $this = $(this).closest('.ajx');
var $ser = $(".ajx select").serialize();
var $ser2 = $(".ajx input").serialize();
$.ajax({
url: $form.attr("action"),
data: $ser,
type: method,
success: function(res) {
var $fnd = '#' + $this.attr('id') + ' fieldset';
$this.html($(res).find($fnd));
},
error: function (xhr, status) {
alert('Unknown error - status: ' + status);
}
});
});
在 Firefox 的控制台中,我可以看到有对象,上下文是 Object[div#ajx_1.ajx]
。
现在上面的 不适用于较旧的 Firefox,例如 FF7 或 FF3.6,因为我需要将 change
直接设置为正确的字段。
我用这个 JQuery 代码试过了:
$(".ajx select").on("change", function() {
var $this = $(this).closest('.ajx');
console.log($this)
// ...
});
现在对象是正确的,但是当我在控制台中打开对象时,我在上下文中得到了一些不同的东西:select#u_article
。
它似乎确实选择了我的 select
而不是 div
作为这里的元素。
为什么会这样,我该如何更改?
理解问题后,我想我有一个解决方案:
在 ajax 成功时重新附加事件:
$this.find("select").on("change", theChangeFunction);
我有一个表单,我可以在其中更改 select 字段时的字段集。
我的 HTML 看起来像这样:
<div class="ajx" id="ajx_1">
<fieldset>
<legend>Inhalt</legend>
<select id="u_article" ...>
...
</fieldset>
</div>
以下 JQuery 适用于所有现代浏览器:
$(".ajx").on("change", function() {
var $this = $(this);
console.log($this)
// ... additional code for understanding what I want to do:
var $form = $('form');
var method = $form.attr("method").toUpperCase();
var $this = $(this).closest('.ajx');
var $ser = $(".ajx select").serialize();
var $ser2 = $(".ajx input").serialize();
$.ajax({
url: $form.attr("action"),
data: $ser,
type: method,
success: function(res) {
var $fnd = '#' + $this.attr('id') + ' fieldset';
$this.html($(res).find($fnd));
},
error: function (xhr, status) {
alert('Unknown error - status: ' + status);
}
});
});
在 Firefox 的控制台中,我可以看到有对象,上下文是 Object[div#ajx_1.ajx]
。
现在上面的 不适用于较旧的 Firefox,例如 FF7 或 FF3.6,因为我需要将 change
直接设置为正确的字段。
我用这个 JQuery 代码试过了:
$(".ajx select").on("change", function() {
var $this = $(this).closest('.ajx');
console.log($this)
// ...
});
现在对象是正确的,但是当我在控制台中打开对象时,我在上下文中得到了一些不同的东西:select#u_article
。
它似乎确实选择了我的 select
而不是 div
作为这里的元素。
为什么会这样,我该如何更改?
理解问题后,我想我有一个解决方案: 在 ajax 成功时重新附加事件:
$this.find("select").on("change", theChangeFunction);