Javascript InternetExplorer仅在jQueryAjax成功响应中执行一次函数,即使有三个请求

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

我有一个函数,它使用jQuery.load()调用来自不同页面的3个表单片段,然后在成功文本状态下尝试加载颜色选择器:

$(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树(按钮和链接通常放在顶部)。