Internet Explorer только один раз выполняет функцию внутри jQuery ajax в ответ на успешное выполнение, хотя есть три запроса - PullRequest
1 голос
/ 16 февраля 2010

У меня есть функция, которая использует jQuery.load () для вызова трех фрагментов форм на разных страницах, а затем в текстовом статусе успеха пытается загрузить палитру цветов:

$(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: предупреждение 'one' отображается три раза, а средство выбора цвета не отображается.

Любая помощь будет отличной! Приветствия.

EDIT

Строка, на которую ссылается IE, когда выдает эту ошибку: 'Ошибка: объект не поддерживает это свойство или метод.' это:

$ ( 'input.pickcolor'). ColorPicker

У кого-нибудь есть идеи? Спасибо

Ответы [ 2 ]

0 голосов
/ 16 февраля 2010

Я только что протестировал скрипт, и единственная проблема, которая у меня возникла, заключается в том, что функция «load» имеет запятую в последнем параметре, она отлично работает в IE6 и IE7.

$(putsnippethere).load(snippeturl, function (responseText, textStatus, XMLHttpRequest, ) 

Обновить все скрипты:

<code><!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">
$ (function () { addDebug = function (text) { $ ("# mydebug"). append (text + "
"); } function ajax_form (putloadingboxhere, putnippethere, snippeturl) { $ (putnippethere) .load (snippeturl, function (responseText, textStatus, XMLHttpRequest) { if (textStatus == "success") { addDebug (putnippethere + ":: One"); var lstElPickcolor = $ ("input.pickcolor"); addDebug (putnippethere + ":: Length input:" + lstElPickcolor.length); $ .each (lstElPickcolor, function (i, val) { addDebug (putnippethere + ":: add ColorPicker для input.id =" + $ (val) .attr ('id')); $ (Значение) .ColorPicker ({ onShow: function (colpkr) { $ (Colpkr) .fadeIn (500); вернуть ложь; }, onSubmit: функция (hsb, hex, rgb, xel) { $ (XEL) .val (шест); $ (XEL) .ColorPickerHide (); $ (xel) ​​.siblings ('. colorpreview'). css ('background-color', '#' + hex); }, onBeforeShow: function () { $ (Это) .ColorPickerSetColor (this.value); } }); addDebug (putnippethere + ":: unbind keyup события для input.id =" + $ (val) .attr ('id')); $ (Значение) .unbind ( 'KeyUp'); addDebug (putnippethere + ":: связывание события keyup для input.id =" + $ (val) .attr ('id')); $ (val) .bind ('keyup', function () { $ (Это) .ColorPickerSetColor (this.value); }); }); addDebug (putnippethere + ":: Two"); addDebug (""); } if (textStatus == "error") { // Показать сообщение об ошибке } }); } 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'); });
0 голосов
/ 16 февраля 2010

Вы связали ".live" вместо ".bind"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...