【发布时间】:2015-02-12 13:44:52
【问题描述】:
我确实为表单选择过滤创建了一个小脚本。 我的目标是,当用户在“field1”中选择某些内容时,“field2”会被过滤后的 PHP 替换,只剩下选择(通过数组中的数据完成)。
我的 JQuery 在几乎所有现代浏览器中都能正常工作:
$(".ajx").on("change", function() {
var $form = $('form');
var $fields = $(".ajx");
var method = $form.attr("method").toUpperCase();
var $this = $(this);
//var $ser = $fields.serialize();
var $ser = $this.serialize();
console.log($ser);
//console.log($(this))
$('.ajx_load').show();
$.ajax({
url: $form.attr("action"),
data: $ser,
type: method,
success: function(res) {
//$('.ajx').html($(res).find('.ajx div'));
//$this.html($(res).find('.ajx div'));
var $fnd = '#' + $this.attr('id') + ' div';
$this.html($(res).find($fnd));
console.log($this.attr('id'));
console.log($this.html($(res).find($fnd)));
$('.ajx_load').hide();
},
error: function (xhr, status) {
$('.ajx_load').hide();
alert('Unknown error - status: ' + status);
}
});
});
代码应重新加载<fieldset class="axj" id="ajx_1"><div> 中的html 代码,保留在该字段上所做的选择,并将此<fieldset> 中的所有<select> 字段替换为通过PHP 过滤的字段。
这里是使用的 HTML 输出(没有 PHP):http://jsfiddle.net/69rvLtcn/8/
serialize() 函数在 IE(在 IE11 中测试)和 Safari 中不起作用 - 它是空的!
提前感谢您的帮助
编辑: 我试图在“成功:函数”中设置一个 setTimeout()。 当我这样做时(即使我将其设置为 1),在 IE/Safari 中发生的同样的事情也会发生在所有其他浏览器上......?
好像JQuery响应中没有传递选择?!
EDIT2:毕竟是 IE!它以某种方式不序列化请求......?如果我在 PHP 中使用var_dump($_REQUEST); 在 IE/Safari 中检查请求,则在所有其他情况下它都是空的...
【问题讨论】:
-
可以发html代码吗!
-
你能在jsfiddle 中重新创建这个吗?如果无法重新创建它,很难说出正在发生的事情。
$('.ajx_load')是什么?是阻塞指标吗?... -
jsfiddle.net/69rvLtcn/3 我无法分解 JSFiddle 中的代码来工作,因为我通过 PHP 创建了表单,并且每个字段集都是在更改时新创建的。
-
您在 id 选择器 $fnd = '#' + $this.attr('id') + 'div' 中添加空格字符。 id 属性不允许使用空格字符:w3schools.com/tags/att_global_id.asp
-
@ZhivkoDonev $fnd 不代表 ID,而是代表 .find() 中的元素。
标签: jquery ajax forms internet-explorer serialization