Javascript ตั้งค่า img src


96

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

var searchPic;
function LoadImages() {
    searchPic = new Image(100,100);
    searchPic.src = "XXXX/YYYY/search.png";
    // This is correct and the path is correct
}

จากนั้นฉันตั้งค่าภาพโดยใช้

  document["pic1"].src = searchPic;

หรือ

  $("#pic1").attr("src", searchPic);

อย่างไรก็ตามรูปภาพไม่เคยตั้งค่าอย่างถูกต้องใน FireBug เมื่อฉันค้นหารูปภาพที่ฉันได้รับ[object HTMLImageElement]เป็นsrcของรูปภาพ

ใน IE ฉันได้รับ:

http://localhost:8080/work/Sandbox/jpmetrix/[object]

สิ่งนี้อาจช่วยได้stackoverflow.com/questions/4459379/…
Sandeep Amarnath

คำตอบ:



59

JavaScript บริสุทธิ์เพื่อสร้างimgแท็กและadd attributesด้วยตนเอง

var image = document.createElement("img");
var imageParent = document.getElementById("body");
image.id = "id";
image.className = "class";
image.src = searchPic.src;            // image.src = "IMAGE URL/PATH"
imageParent.appendChild(image);

ตั้งค่า src ใน pic1

document["#pic1"].src = searchPic.src;

หรือด้วย getElementById

document.getElementById("pic1").src= searchPic.src;

j-Query เพื่อเก็บสิ่งนี้

$("#pic1").attr("src", searchPic.src);

6
document.getElementById ("pic1") without #
Gianluca Demarinis

6

อินสแตนซ์ของตัวสร้างรูปภาพไม่ได้ถูกนำมาใช้ที่ใดก็ได้ คุณเพียงแค่ตั้งค่าsrcและโหลดรูปภาพล่วงหน้า ... เท่านี้ก็จบการแสดงแล้ว คุณสามารถทิ้งวัตถุและไปต่อได้

document["pic1"].src = "XXXX/YYYY/search.png"; 

คือสิ่งที่คุณควรทำ คุณยังคงสามารถใช้ตัวสร้างรูปภาพและดำเนินการที่สองในonloadตัวจัดการsearchPicไฟล์. เพื่อให้แน่ใจว่าภาพจะถูกโหลดก่อนที่คุณจะตั้งค่าsrcบนimgวัตถุจริง

ชอบมาก:

function LoadImages() {
    searchPic = new Image();
    searchPic.onload=function () {
        document["pic1"].src = "XXXX/YYYY/search.png";
    }
    searchPic.src = "XXXX/YYYY/search.png"; // This is correct and the path is correct
}

หากคุณตั้งค่า src ใน onload () คุณจะได้รับลูปที่ไม่มีที่สิ้นสุดซึ่งขัดขวางเซิร์ฟเวอร์เช่นเมื่อโหลด src แล้วมันจะเรียก onload
David Newcomb

มีบางอย่างผิดปกติเนื่องจากเหตุการณ์โหลดสามารถเริ่มทำงานได้เพียงครั้งเดียว คุณไม่สามารถทำให้มันเริ่มทำงานได้อีกโดยตั้งค่าแหล่งที่มาเป็นภาพเดียวกัน
Breton

1
คุณพูดถูกมีบทความ SO อื่น ๆ ที่พูดถึงปัญหาการแคชแปลก ๆ เมื่อ "XXXX / YYYY / search.png" เป็นรูปเว็บแคมหรือสิ่งที่เปลี่ยนแปลงในฝั่งเซิร์ฟเวอร์ พวกเขาแนะนำให้เราเปลี่ยนลิงก์เป็น "XXXX / YYYY / search.png? t = <thedate>" โซลูชันของคุณดีที่สุดและสะอาดที่สุดดังนั้นฉันจึงรวมสองอย่างเข้าด้วยกันและตอกเซิร์ฟเวอร์
David Newcomb

@DavidNewcomb Yikes! นั่นเป็นเรื่องที่ยุ่งยาก ในกรณีนั้นฉันคิดว่าฉันจะทิ้งส่วน Image () ใหม่และมีภาพโดมจริงสองภาพแทนเช่นบัฟเฟอร์คู่ ซ่อนรูปภาพ 1 ซ่อนรูปภาพ 2 ในตัวจับเวลาช่วง: ตั้งค่า src บน image1 และใน image1.onload ให้แสดง 1 ซ่อน 2 ช่วงการยิง: ตั้งค่า src บน image2 ใน image2.onload แสดง 2 ซ่อน 1. รอช่วงเวลายิง: ตั้งค่า src บน image1 ใน image1.onload แสดง 1 ซ่อน 2- ฯลฯ ฯลฯ ...
Breton

5

นอกจากนี้วิธีหนึ่งในการแก้ปัญหานี้คือการใช้document.createElementและสร้าง html imgของคุณและตั้งค่าแอตทริบิวต์เช่นนี้

var image = document.createElement("img");
var imageParent = document.getElementById("Id of HTML element to append the img");
image.id = "Id";
image.className = "class";
image.src = searchPic.src;
imageParent.appendChild(image);

หมายเหตุ : หนึ่งจุดคือชุมชนจาวาสคริปต์ในขณะนี้กระตุ้นให้นักพัฒนาสามารถใช้เอกสารเตอร์เช่นquerySelector, getElementByIdและgetElementsByClassNameมากกว่าเอกสาร [ "pic1"]



1

คุณไม่จำเป็นต้องสร้างภาพใหม่ทั้งหมด ... แอตทริบิวต์ src ใช้ค่าสตริง :-)


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

คุณพูดถูกฉันไม่ค่อยเข้าใจคำตอบของฉัน ฉันแค่ตั้งใจจะบอกว่าแอตทริบิวต์ src ใช้สตริงและลืมไปโดยสิ้นเชิงเกี่ยวกับข้อได้เปรียบในการแคชของการสร้างImageไว้ล่วงหน้า ขอบคุณ!
JorenB

0

คุณต้องตั้งค่า

document["pic1"].src = searchPic.src;

searchPic เองก็คือ Image () ของคุณคุณต้องอ่าน src ที่คุณตั้งไว้


0

คุณสมบัติ src ของคุณเป็นออบเจ็กต์เนื่องจากคุณกำลังตั้งค่าองค์ประกอบ src เป็นรูปภาพทั้งหมดที่คุณสร้างใน JavaScript

ลอง

document["pic1"].src = searchPic.src;

0

ว้าว! เมื่อคุณใช้srcแล้วsrcของsearchPicต้องใช้ยัง

document["pic1"].src = searchPic.src

ดูดีขึ้น


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