Javascript InternetExplorer仅在jQueryAjax成功响应中执行一次函数,即使有三个请求
我有一个函数,它使用jQuery.load()调用来自不同页面的3个表单片段,然后在成功文本状态下尝试加载颜色选择器:Javascript InternetExplorer仅在jQueryAjax成功响应中执行一次函数,即使有三个请求,javascript,ajax,internet-explorer,jquery,Javascript,Ajax,Internet Explorer,Jquery,我有一个函数,它使用jQuery.load()调用来自不同页面的3个表单片段,然后在成功文本状态下尝试加载颜色选择器: $(document).ready(function() { function ajax_form(putloadingboxhere, putsnippethere, snippeturl) { $(putsnippethere).load(snippeturl, function (responseText, textStatus, XMLHtt
$(document).ready(function() {
function ajax_form(putloadingboxhere, putsnippethere, snippeturl) {
$(putsnippethere).load(snippeturl, function (responseText, textStatus, XMLHttpRequest, ) {
if (textStatus == "success") {
alert('One')
$("input.pickcolor").ColorPicker({
onShow: function (colpkr) {
$(colpkr).fadeIn(500);
return false;
},
onSubmit: function(hsb, hex, rgb, el) {
$(el).val(hex);
$(el).ColorPickerHide();
$(el).siblings('.colorpreview').css('background-color', '#' + hex);
},
onBeforeShow: function () {
$(this).ColorPickerSetColor(this.value);
}
})
.bind('keyup', function(){
$(this).ColorPickerSetColor(this.value);
});
alert('Two')
}
if (textStatus == "error") {
// Show error message
}
});
}
ajax_form('tab_box', '#formone', 'snippet_one.htm #snippet');
ajax_form('tab_box', '#formtwo', 'snippet_two_copy.htm #snippet');
ajax_form('tab_box', '#formthree', 'snippet_three.htm #snippet');
});
它在Firefox和Safari中运行良好,但(惊喜,惊喜)IE对此有问题。我添加了一个警报,以查看其中一个函数前后的情况
FF&Safari&IE8:警报“一”和警报“二”按预期显示三次,并显示颜色选择器。
IE6和7:警报“一”显示三次,颜色选择器不显示
任何帮助都会很好!干杯
编辑
IE在抛出此错误时引用的行:
'错误:对象不支持此属性或方法。'
是:
$('input.pickcolor').ColorPicker
有人有什么见解吗?谢谢您是否绑定了“.live”而不是“.bind”?我刚刚测试了脚本,唯一的问题是函数“load”在最后一个参数中有一个逗号,它在IE6和IE7中运行良好
$(putsnippethere).load(snippeturl, function (responseText, textStatus, XMLHttpRequest, )
更新所有脚本:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="css/colorpicker.css" type="text/css" />
<link rel="stylesheet" media="screen" type="text/css" href="css/layout.css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="js/colorpicker.js"></script>
<script type="text/javascript" src="js/eye.js"></script>
<script type="text/javascript" src="js/utils.js"></script>
<script type="text/javascript" src="js/layout.js?ver=1.0.2"></script>
<title>load</title>
</head>
<body>
<div id="formone"></div>
<div id="formtwo"></div>
<div id="formthree"></div>
<input id="i1" class="pickcolor" type="text" /><br />
<input id="i2" class="pickcolor" type="text" /><br />
<input id="i3" class="pickcolor" type="text" /><br />
<pre style="text-align:left;width:600px;" id="mydebug"></pre>
</body>
</html>
<script>
$(function() {
addDebug = function(text){
$("#mydebug").append(text+"<br />");
}
function ajax_form(putloadingboxhere, putsnippethere, snippeturl) {
$(putsnippethere).load(snippeturl, function (responseText, textStatus, XMLHttpRequest) {
if (textStatus == "success") {
addDebug(putsnippethere + " :: One");
var lstElPickcolor = $("input.pickcolor");
addDebug(putsnippethere + " :: Length inputs : " + lstElPickcolor.length);
$.each(lstElPickcolor, function(i, val){
addDebug(putsnippethere + " :: add ColorPicker for input.id=" + $(val).attr('id'));
$(val).ColorPicker({
onShow: function (colpkr) {
$(colpkr).fadeIn(500);
return false;
},
onSubmit: function(hsb, hex, rgb, xel) {
$(xel).val(hex);
$(xel).ColorPickerHide();
$(xel).siblings('.colorpreview').css('background-color', '#' + hex);
},
onBeforeShow: function () {
$(this).ColorPickerSetColor(this.value);
}
});
addDebug(putsnippethere + " :: unbind event keyup for input.id=" + $(val).attr('id'));
$(val).unbind('keyup');
addDebug(putsnippethere + " :: bind event keyup for input.id=" + $(val).attr('id'));
$(val).bind('keyup', function(){
$(this).ColorPickerSetColor(this.value);
});
});
addDebug(putsnippethere + " :: Two");
addDebug(" ");
}
if (textStatus == "error") {
// Show error message
}
});
}
ajax_form('tab_box', '#formone', 'snippet_one.htm #snippet');
ajax_form('tab_box', '#formtwo', 'snippet_two_copy.htm #snippet');
ajax_form('tab_box', '#formthree', 'snippet_three.htm #snippet');
});
</script>
负载
$(函数(){
addDebug=函数(文本){
$(“#mydebug”).append(text+”
);
}
函数ajax_表单(putloadingboxhere、putsnippethere、snippeturl){
$(putsnippethere).load(snippeturl,函数(responseText,textStatus,XMLHttpRequest){
如果(textStatus==“成功”){
addDebug(putsnippethere+“::一”);
var lstElPickcolor=$(“input.pickcolor”);
addDebug(putsippethere+::长度输入:“+lstElPickcolor.Length”);
$.each(lstElPickcolor,function(i,val){
addDebug(putsnippethere+”::为输入添加颜色选择器。id=“++$(val).attr('id'));
$(val).颜色选择器({
onShow:函数(colpkr){
美元(colpkr).fadeIn(500);
返回false;
},
onSubmit:函数(hsb、十六进制、rgb、xel){
$(像素).val(十六进制);
$(xel.ColorPickerHide();
$(xel).sides('.colorpreview').css('background-color','#'+hex);
},
onBeforeShow:函数(){
$(this.ColorPickerSetColor)(this.value);
}
});
addDebug(putsnippethere+”::为输入解除绑定事件键控。id=“++$(val).attr('id'));
$(val).解除绑定('keyup');
addDebug(putsnippethere+)::为输入绑定事件keyup.id=“++$(val.attr('id'));
$(val).bind('keyup',function(){
$(this.ColorPickerSetColor)(this.value);
});
});
addDebug(putsnippethere+“::2”);
addDebug(“”);
}
如果(textStatus==“错误”){
//显示错误消息
}
});
}
ajax_form('tab_box','#formone','snippet_one.htm#snippet');
ajax_form('tab_box','#formtwo','snippet_two_copy.htm#snippet');
ajax_form('tab_box','#formthree','snippet_three.htm#snippet');
});
由于“一”会弹出三次,因此创建三次颜色选择器似乎有问题。应该有一个javascript错误,因为它似乎要中止……我在IE中打开了脚本错误,并在每次发出警报后得到响应——“错误:对象不支持此属性或方法。”我查看了一下,但似乎没有任何相关内容。你能解释这意味着什么吗?谢谢你的帮助。嗨,安德烈斯,谢谢你的帮助,我去掉了那个逗号,但还是不起作用。有趣的是,当我复制并测试你上面的代码时,我发现Firefox和IE出现了同样的情况——只有“一”出现了三次。你能想出一个原因吗?事实上,忽略这一点,它仍然在做和以前一样的事情。FF为1和2x3,IE7仅为1x3。哦,等等,input.pickcolor是通过ajax购买的-它们的形式是ajax购买到页面中的一个片段。请尝试此操作并查看结果它仍然具有相同的结果-在FF中使用ajax购买的输入字段和页面固有的输入字段都很好,在IE中都不起作用-只需获得一个,一个,一个警觉了错误:对象不支持此属性或方法。IE中的每个警报后都会显示。快速更新:从jQuery 1.7开始,.live()方法已被弃用。您应该改为使用.on()
来附加事件处理程序.on()
也提高了速度,因为在DOM顶部查找内容时,它不需要遍历整个DOM树(按钮和链接通常放在顶部)。