ฉันจะหยุด Chrome จากการใส่กล่องสีเหลืองของเว็บไซต์ได้อย่างไร


151

ท่ามกลางข้อความและภาพอื่น ๆ ที่เป็นโรคเอดส์ในการส่งแบบฟอร์มการตรวจสอบภายหลังฉันกำลังระบายสีกล่องอินพุตของฉันเป็นสีแดงเพื่อบ่งบอกถึงพื้นที่โต้ตอบที่ต้องการความสนใจ

บน Chrome (และสำหรับผู้ใช้แถบเครื่องมือ Google) คุณสมบัติเติมอัตโนมัติจะเปลี่ยนสีรูปแบบการป้อนของฉันเป็นสีเหลือง นี่คือปัญหาที่ซับซ้อน: ฉันต้องการให้สมบูรณ์แบบอัตโนมัติอนุญาตในแบบฟอร์มของฉันมันความเร็วผู้ใช้เข้าสู่ระบบฉันจะตรวจสอบความสามารถในการเปิดคุณลักษณะการเติมข้อความอัตโนมัติให้ปิดถ้า / เมื่อมีข้อผิดพลาดทริกเกอร์ แต่มันซับซ้อน บิตของการเข้ารหัสเพื่อปิดโดยอัตโนมัติทางโปรแกรมสำหรับการป้อนข้อมูลที่ได้รับผลกระทบเดียวในหน้า นี่มันง่ายมากที่จะปวดหัว

ดังนั้นเพื่อพยายามหลีกเลี่ยงปัญหานั้นมีวิธีใดที่ง่ายกว่าในการหยุด Chrome จากการเปลี่ยนสีกล่องอินพุตอีกครั้งหรือไม่

[แก้ไข] ฉันลองใช้! ข้อเสนอแนะที่สำคัญด้านล่างและไม่มีผลใด ๆ ฉันยังไม่ได้ตรวจสอบ Google Toolbar เพื่อดูว่าคุณลักษณะ! สำคัญจะใช้งานได้หรือไม่

เท่าที่ฉันสามารถบอกได้ไม่มีวิธีอื่นใดนอกเหนือจากการใช้แอตทริบิวต์การเติมข้อความอัตโนมัติ (ซึ่งดูเหมือนจะใช้งานได้)


1
นี่ไม่ใช่แค่ปัญหาใน Chrome แถบเครื่องมือ Google สำหรับเบราว์เซอร์อื่นทำ "สีเหลือง" ของฟิลด์ป้อนข้อมูลเดียวกัน
Carlton Jenke

2
ฉันได้ให้คำตอบสำหรับคุณที่ทำงานด้านล่าง
John Leidegren

8
ฉันไม่เข้าใจว่าทำไมทุกคนกำลังพูดถึงโครงร่าง: ไม่มีคำถามเกี่ยวกับพื้นหลังเยลโลไม่ใช่เค้าโครง และแอตทริบิวต์การเติมข้อความอัตโนมัติที่ตั้งค่าเป็นปิดจะไม่แก้ไขปัญหาดังที่ davebug กล่าวว่าเขาต้องการให้การเติมข้อความอัตโนมัติทำงาน แต่ไม่ใช่พื้นหลังสีเหลือง

คำตอบ:


74

ฉันรู้ใน Firefox คุณสามารถใช้ attribute autocomplete = "off" เพื่อปิดการใช้งานฟังก์ชั่นเติมข้อความอัตโนมัติ หากการทำงานใน Chrome (ไม่ได้ทดสอบ) คุณสามารถตั้งค่าคุณลักษณะนี้เมื่อพบข้อผิดพลาด

สามารถใช้กับทั้งองค์ประกอบเดียวได้

<input type="text" name="name" autocomplete="off">

... รวมถึงแบบฟอร์มทั้งหมด

<form autocomplete="off" ...>

"ฉันจะตรวจสอบความสามารถในการปิดใช้งานแอตทริบิวต์การเติมข้อความอัตโนมัติหาก / เมื่อมีข้อผิดพลาดเกิดขึ้น แต่มันเป็นบิตที่ซับซ้อนของการเขียนโปรแกรมโดยอัตโนมัติปิดโปรแกรมเติมข้อความอัตโนมัติสำหรับอินพุตที่ได้รับผลกระทบเพียงหน้าเดียว"
Dave Rutledge

เฮ้ ... ใช่ขอบคุณแม้ว่าฉันคิดว่าฉันยังคงต้องเช็คอินใน Chrome ใช่ไหม
Dave Rutledge

2
สำหรับคนที่ใช้รูปแบบง่ายๆของราง<%= simple_form_for @user, html: { autocomplete: 'off' } do |f| %>
carbonr

ขอโทษที่บอกว่านี่ไม่ได้ช่วยฉัน
M.Islam

136

ตั้งค่าคุณสมบัติเค้าร่าง CSS เป็น none

input[type="text"], input[type="password"], textarea, select { 
    outline: none;
}

ในกรณีที่เบราว์เซอร์อาจเพิ่มสีพื้นหลังเช่นนี้สามารถแก้ไขได้โดยสิ่งที่ต้องการ

:focus { background-color: #fff; }

9
พื้นหลัง? ฉันไม่ทราบว่า Chrome เพิ่มสีพื้นหลังด้วยหรือไม่ ถ้าเป็นเช่นนั้นสามารถแก้ไขได้โดยสิ่งที่ต้องการ:focus { background-color: #fff; }
John Leidegren

การฆ่าเค้าร่างด้วย CSS อาจป้องกันการทำให้เป็นสีเหลือง แต่จะไม่ป้องกันการป้อนอัตโนมัติจริง หากคุณต้องการทำสิ่งสำคัญคือการใช้แอตทริบิวต์การเติมข้อความอัตโนมัติที่ไม่เป็นมาตรฐานหรือไม่
Tom Boutell

2
@pestaa ถูกต้องนี่ไม่ใช่คำตอบที่ถูกต้อง แต่แน่นอนว่าจะสามารถแก้ปัญหาที่คล้ายกันได้
David Lawson

ระวังเมื่อจัดการกับแท็บเล็ตและสิ่งต่าง ๆ เบราว์เซอร์ Android เริ่มต้นนั้นใช้งานได้ยากโดยไม่ต้องมีโครงร่าง ง่ายพอที่จะใช้กับเบราว์เซอร์ที่ไม่ใช่สำหรับมือถือ :)
Tim Post

การปรับปรุงเล็กน้อย: input[type=text], input[type=password], input[type=email], textarea, select { outline: none; }
เฟลิเป้ลิมา

56

นี่คือสิ่งที่คุณกำลังมองหา!

// Just change "red" to any color
input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px red inset;
}

นี่เป็นแฮ็คที่ยอดเยี่ยม ขอบคุณ
Jason

ฉันจะเพิ่มโฟกัสไปที่: Dinput:-webkit-autofill, input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #FFF inset; }
StephanieQ

สวัสดี @JStormThaKid ฉันใช้สิ่งนี้ ... แต่ไม่ได้ผลสำหรับอินพุตที่ถูกต้อง ... โปรดตอบคำถามนี้ ...
mithu

ขอบคุณที่ตอบคำถามที่เขาถามจริง! ฉันเกือบจะเริ่มสูญเสียความหวัง
BVernon

คำตอบที่ดีที่สุดที่นี่ฉันยังต้องการเติมข้อความอัตโนมัติของ Google ดังนั้นขอขอบคุณ
Spangle

14

ด้วยการใช้ jQuery เล็กน้อยคุณสามารถลบสไตล์ของ Chrome ออกไปในขณะที่รักษาการทำงานของการเติมข้อความอัตโนมัติยังคงอยู่ ฉันเขียนข้อความสั้น ๆ เกี่ยวกับที่นี่: http://www.benjaminmiles.com/2010/11/22/fixing-google-chromes-yellow-autocomplete-styles-with-jquery/

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
$(window).load(function(){
    $('input:-webkit-autofill').each(function(){
        var text = $(this).val();
        var name = $(this).attr('name');
        $(this).after(this.outerHTML).remove();
        $('input[name=' + name + ']').val(text);
    });
});}

ขอบคุณสำหรับคำใบ้! อย่างไรก็ตามหลังจากโพสต์แบบฟอร์มคลิกที่ปุ่มย้อนกลับไฮไลท์สีเหลืองจะกลับมา ฉันได้ขยายตัวอย่างของคุณ (ดูคำตอบของฉัน) เพื่อครอบคลุมนี้
321X

+1 @Benjamin ทางออกที่ดีมันกระพริบสีเหลืองเล็กน้อย แต่จะแก้ไขในตอนท้าย;)
itme

7

หากต้องการลบเส้นขอบสำหรับฟิลด์ทั้งหมดคุณสามารถใช้สิ่งต่อไปนี้:

*:focus { outline:none; }

หากต้องการลบเส้นขอบสำหรับเขตข้อมูลที่เลือกเพียงแค่ใช้คลาสนี้กับฟิลด์อินพุตที่คุณต้องการ:

.nohighlight:focus { outline:none; }

แน่นอนว่าคุณสามารถเปลี่ยนเส้นขอบตามที่คุณต้องการได้เช่นกัน:

.changeborder:focus { outline:Blue Solid 4px; }

(จาก Bill Beckelman: แทนที่ขอบเขตอัตโนมัติของ Chrome รอบ ๆ ฟิลด์ที่ใช้งานอยู่โดยใช้ CSS )


2

ใช่มันจะปวดหัวที่สำคัญซึ่งในความคิดของฉันไม่คุ้มค่าตอบแทน บางทีคุณอาจปรับแต่งกลยุทธ์ UI ของคุณเล็กน้อยและแทนที่จะระบายสีกล่องสีแดงคุณสามารถระบายสีเส้นขอบสีแดงหรือใส่เทปสีแดงเล็ก ๆ ไว้ข้างๆมัน (เช่นเทป "กำลังโหลด" gmails) ซึ่งจางหายไปเมื่ออยู่ในกล่อง โฟกัส


1

มันเป็นเค้กชิ้นหนึ่งที่มี jQuery:

if ($.browser.webkit) {
    $("input").attr('autocomplete','off');
}

หรือถ้าคุณต้องการให้เลือกมากกว่านี้ให้เพิ่มชื่อคลาสสำหรับตัวเลือก



1

หลังจากใช้ @Benjamin วิธีแก้ปัญหาของเขาฉันพบว่าการกดปุ่มย้อนกลับจะให้ไฮไลท์สีเหลืองแก่ฉัน

ทางออกของฉันอย่างใดเพื่อป้องกันไม่ให้ไฮไลท์สีเหลืองนี้จะกลับมาเป็นโดยใช้จาวาสคริปต์ jQuery ต่อไปนี้:

<script type="text/javascript">
    $(function() {
        if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
        var intervalId = 0;
            $(window).load(function() {
                intervalId = setInterval(function () { // << somehow  this does the trick!
                    if ($('input:-webkit-autofill').length > 0) {
                        clearInterval(intervalId);
                        $('input:-webkit-autofill').each(function () {
                            var text = $(this).val();
                            var name = $(this).attr('name');
                            $(this).after(this.outerHTML).remove();
                            $('input[name=' + name + ']').val(text);
                        });
                    }
                }, 1);
            });
        }
    });
</script>

หวังว่ามันจะช่วยให้ทุกคน !!


1

วิธีนี้ใช้ได้ผล เหนือสิ่งอื่นใดคุณสามารถใช้ค่า rgba ได้ (แฮ็กแทรกเงาของกล่องเงาไม่ทำงานกับ rgba) นี่เป็นคำตอบของ @ Benjamin เล็กน้อย ฉันกำลังใช้ $ (เอกสาร). Ready () แทนที่จะเป็น $ (หน้าต่าง) .load () ดูเหมือนว่าจะทำงานได้ดีขึ้นสำหรับฉัน - ตอนนี้มี FOUC น้อยกว่ามาก ฉันไม่เชื่อว่ามีและข้อเสียในการใช้ $ (เอกสาร) .ready ()

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
    $(document).ready(function() {
        $('input:-webkit-autofill').each(function(){
            var text = $(this).val();
            var name = $(this).attr('name');
            $(this).after(this.outerHTML).remove();
            $('input[name=' + name + ']').val(text);
        });
    });
};

1

สำหรับรุ่นวันนี้ก็สามารถใช้งานได้เช่นกันหากวางไว้ในหนึ่งในสองอินพุตการเข้าสู่ระบบ ยังแก้ไขปัญหาเวอร์ชัน 40+ และ Firefox ล่าช้า

<input readonly="readonly" onfocus="this.removeAttribute('readonly');" />

0
input:focus { outline:none; }

มันใช้งานได้ดีสำหรับฉัน แต่มีแนวโน้มที่จะทำให้สิ่งต่าง ๆ เหมือนกันในไซต์ของคุณคุณต้องการรวมไว้ใน CSS สำหรับ textareas ด้วย:

textarea:focus { outline:none; }

นอกจากนี้อาจดูเหมือนชัดเจนที่สุด แต่สำหรับผู้เริ่มต้นคุณสามารถตั้งค่าเป็นสีเช่น:

input:focus { outline:#HEXCOD SOLID 2px ; }

-1

หากฉันจำได้อย่างถูกต้องกฎสำคัญ! ในสไตล์ชีทสำหรับสีพื้นหลังของอินพุตจะแทนที่การเติมข้อความในแถบเครื่องมือของ Google โดยอัตโนมัติ - สันนิษฐานว่าคงเหมือนกันกับ Chrome

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.