IE9 การทาสี CSS ตามเวลาส่ง

เรามี GIF สปินเนอร์แบบเคลื่อนไหวที่เราใช้เพื่อเพิ่มสีสันให้กับปุ่มส่งหลังจากที่ผู้ใช้ส่งแบบฟอร์มแล้ว หากการตรวจสอบทั้งหมดผ่านแบบฟอร์ม เราจะกำหนดพื้นหลังผ่านวิธี css() ของ jQuery โดยตั้งค่ารูปภาพพื้นหลัง ตำแหน่ง และสีทั้งหมดในที่เดียว

IE9 ไม่แสดงภาพพื้นหลังเมื่อส่ง แม้ว่าจะยังคงเห็นได้ในเบราว์เซอร์อื่นก็ตาม

เทคนิคนี้ทำงานได้ดีในเบราว์เซอร์ IE รุ่นก่อนๆ แต่ดูเหมือนว่าจะใช้งานไม่ได้ใน IE9 รวมถึงใน "โหมดเบราว์เซอร์" รุ่นเก่าด้วย ฉันไม่แน่ใจว่านี่เป็นจุดบกพร่องใน IE9 หรือไม่ แต่พฤติกรรมได้เปลี่ยนไปอย่างแน่นอน และฉันไม่สามารถเชื่อถือโหมด IE7/8 ให้ทำงานตามที่คาดไว้ได้เพราะเหตุนี้

ดูเหมือนว่าบางที IE ตัดสินใจที่จะไม่ทาสีใหม่อีกต่อไปหลังจากที่ผู้ใช้ส่งแบบฟอร์มแล้ว หากเป็นกรณีนี้ ฉันไม่แน่ใจว่าฉันมีวิธีแก้ไข แต่ฉันอยากจะคิดว่านี่ไม่เป็นเช่นนั้นจริงๆ เราประสบปัญหาก่อนหน้านี้เกี่ยวกับเทคนิคนี้ใน Firefox โดยเราพบว่า Firefox หยุดคำขอ http ทั้งหมด นอกเหนือจากคำขอแบบฟอร์ม ซึ่งหมายความว่าหากภาพพื้นหลังไม่อยู่ในแคช ก็จะไม่ทำงาน ด้วยเหตุนี้ เราจึงได้โหลดสปินเนอร์ไว้ล่วงหน้าบนออบเจ็กต์รูปภาพในหน่วยความจำ

ที่น่าสนใจคือถ้าฉันเรียกใช้วิธีที่อัปเดต CSS บนปุ่มจากคอนโซลเครื่องมือ IE dev ด้วยตนเอง มันก็ใช้งานได้ดี เฉพาะเมื่อเรามีการส่งจริงเท่านั้นที่จะดื้อรั้นและล้มเหลวในการหมุน สิ่งที่น่าสนใจคือ จะ ลบข้อความออกจากปุ่มส่ง ซึ่งเป็นส่วนที่สองของเอฟเฟกต์

ใครมีความคิดเห็นเกี่ยวกับสาเหตุที่ทำให้เกิดสิ่งนี้/จะป้องกันอย่างไร

ต่อไปนี้เป็นโค้ด live()d เวอร์ชันที่เพรียวบางลงซึ่งจัดการการส่ง:

jQuery.fn.disableSubmit = function() {
    this.find("input[type=submit]").each(function() {
        $(this).css({"background": "url(/asdasdasd.gif) no-repeat 50% 50%"});
    });
    return this;
};

$("form").live("submit", function() {
    var form = $(this);

    form.disableSubmit();
    return true;
});

person thynctank    schedule 10.05.2011    source แหล่งที่มา
comment
มีรหัสใดที่จะแสดง? คุณตั้งค่า css ก่อนหรือหลังการเรียกใช้การส่งเพจหรือไม่? คุณใช้พฤติกรรมเริ่มต้นของปุ่มส่งหรือเรียก send() จากรหัสของคุณด้วยตนเองหรือไม่   -  person Robert Beuligmann    schedule 11.05.2011
comment
ไม่มีรหัส แม้ว่าฉันจะสามารถประดิษฐ์บางส่วนได้ในภายหลังวันนี้หรือพรุ่งนี้ CSS ได้รับการตั้งค่าหลังจากส่งเหตุการณ์การส่ง แต่ก่อนที่พฤติกรรมเริ่มต้นจะเริ่มขึ้น นี่คือการส่งจริง (ผ่านการป้อนคีย์ในช่องหรือการกดปุ่มส่ง) ไม่ใช่การเรียกส่งแบบเป็นโปรแกรม   -  person thynctank    schedule 11.05.2011
comment
ลอง <button type=submit><img ...gif></button> มันจะแสดงพฤติกรรมแบบเดียวกันหรือไม่?   -  person c-smile    schedule 11.05.2011
comment
มีหลายครั้งที่ dom ล้มเหลวในการรีเฟรชองค์ประกอบบางอย่าง และฉันถูกบังคับให้เขย่าเบา ๆ ด้วยตนเองโดยใช้ $(...).hide().show(0); เห็นได้ชัดว่านี่เป็นการแฮ็ก แต่บางครั้งก็อาจใช้กลอุบายได้   -  person cwharris    schedule 11.05.2011
comment
นอกจากนี้... มีอะไรกับ .each(...) ? คุณไม่สามารถโทร .css(...) โดยไม่ต้องวนซ้ำแต่ละรายการด้วยตนเองได้ไหม   -  person cwharris    schedule 11.05.2011
comment
ขอบคุณ แต่ไม่ขอบคุณที่เปลี่ยนปุ่มส่งทุกปุ่มสำหรับองค์ประกอบปุ่ม c-smile ค่อนข้างจะไม่มีผลเลย   -  person thynctank    schedule 11.05.2011
comment
บิต hide().show(0) นั้นค่อนข้างดี แต่ดูเหมือนว่าจะปิดการใช้งานภาพเคลื่อนไหวบน GIF แบบเคลื่อนไหวที่เรามีเป็นภาพพื้นหลังของเรา เกี่ยวกับ each() นั้น จริงๆ แล้วมีหลายสิ่งที่เกิดขึ้นในแต่ละครั้งของเรา มากกว่าแค่การโทร css() และไม่สามารถเชื่อมต่อได้ทั้งหมด   -  person thynctank    schedule 11.05.2011


คำตอบ (1)


ฉันมีปัญหาที่คล้ายกันกับ ExtJS และค้นพบสิ่งที่คุณค้นพบเกี่ยวกับ IE9 ที่ไม่โหลดรูปภาพใหม่หลังจากส่งแบบฟอร์มแล้ว

นี่คือวิธีแก้ปัญหาของฉันที่ไม่จำเป็นต้องโหลดล่วงหน้า แม้ว่ายอมรับว่าอาจเป็นการแฮ็กเล็กน้อยก็ตาม

function() {    
    Ext.MessageBox.wait('Searching for tenants eligible for rent increase...', 'Searching');
    setTimeout(function() { document.getElementById('rental_increase_form').submit(); }, 200);
    return false;
}

โดยพื้นฐานแล้ว ฉันจะคืนค่าเท็จเมื่อเหตุการณ์การส่งแบบฟอร์มเริ่มทำงาน ฉันจะโหลด CSS ทั้งหมด จากนั้นฉันจะส่งแบบฟอร์มด้วยตนเองผ่าน Javascript หลังจากหมดเวลา 200 มิลลิวินาที

ฉันหวังว่ามันจะช่วยได้ คุณได้ส่งข้อบกพร่องไปยัง Microsoft หรือไม่?

person Philip Walton    schedule 25.08.2011