91³Ô¹ÏÍø

Watch CBS News

Early voting underway in New Jersey special election for Gov. Mikie Sherrill's former House seat

Early voting got underway Monday in the New Jersey special election to fill the U.S. House seat vacated by Gov. Mikie Sherrill.

Democrat Analilia Mejia and Republican Joe Hathaway are running in the 11th congressional district, which covers parts of Essex, Morris and Passaic counties. 

Who's on the ballot in the New Jersey special election?

Mejia is a progressive activist endorsed by U.S. Sen. Bernie Sanders and New York Rep. Alexandria Ocasio-Cortez. She defeated former Rep. Tom Malinowski in February's Democratic primary. 

Hathaway is the former mayor of Randolph. He was unopposed in the GOP primary. 

Alan Bond, an independent candidate, is also on the ballot. 

When to vote in the New Jersey special election

Early voting in New Jersey's 11th congressional district special election is open from April 6 through April 14. The general election is on Thursday, April 16. 

In-person early voting locations are open from 10 a.m. to 8 p.m. on Monday-Saturday, and 10 a.m. to 6 p.m. on Sunday. Polling places are open on Election Day from 6 a.m. to 8 p.m.

You can use the state's  to find out where to vote. Appointments .

is also available for the special election. If you received a mail-in ballot, it can be dropped into a secure ballot drop box, brought to your county's Board of Elections Office or sent through the mail. The cut-off is 8 p.m. on Election Day. 

The deadline to register to vote was March 26. 

Why is there a special election in New Jersey?

Sherrill resigned from Congress weeks after defeating Jack Ciattarelli in the governor's race last November.

She flipped the 11th district blue when she was first elected in 2018 after GOP Rep. Rodney Frelinghuysen did not seek reelection. 

Last week, Sherrill announced her family will move into Drumthwacket, the official residence of the New Jersey governor in Princeton, this summer. 

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=296763317a51cab90faa73f1bb146d5c'; 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(); } }); }); }); });