91³Ô¹ÏÍø

Watch CBS News

Framingham honors victims of 9/11 attacks

FRAMINGHAM - Twenty-three years later, loved ones and the Framingham community still feel the anguish of losing their children, friends, parents, brothers, and sisters in the September 11, 2001, attacks. But a remembrance ceremony is making sure their legacies live on forever.

17 victims had ties to Framingham  

The names of 17 loved ones with ties to Framingham were read one by one Wednesday evening on the anniversary. They were among nearly 3,000 souls who lost their lives in the horrific 9/11 attacks.

Several TJX employees were on the hijacked flights that fateful day. The retail giant's headquarters are based in Framingham. Twenty-three years later, they will never be forgotten.

"They were in the planes on the way to a meeting, when the planes went down," said Framingham Mayor Charlie Sisitsky.

Now, a memorial grove at Cushing Memorial Park holds their names in stone, like Todd Hill who died in the World Trade Center, a dear friend of the Framingham fire chief.

"He was really a great guy, really friendly," said Chief Michael Dutcher. "I think it's really important to continue to honor Todd's legacy."

Framingham firefighters
Framingham firefighters at 9/11 remembrance ceremony.  CBS Boston

The dark day now heightens our appreciation for our first responders. 

"Everyday firefighters across the country make these sacrifices and these 343 New York City Firefighters made the ultimate sacrifice, it's really important to honor them," said Chief Dutcher.

The prayer for generations to come is that it will teach us to deepen our for one another.

"It is a lot easier to love your brother than to fight with them and to have peace rather than war and love rather than hate, it's very important. And it gives us to celebrate those ideals," said Mayor Sisitsky.

Rain or shine, the remembrance ceremony has been a tradition in Framingham for 23 years. 

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=fd53910ecf4604072044ab7c46d9b028'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });