मेरे पास यह बटन ऑनक्लिक विशेषता के साथ है जो appr नामक फ़ंक्शन को कॉल करता है। PHP द्वारा उत्पन्न प्रत्येक बटन के लिए appr को दिए गए पैरामीटर भिन्न हैं:

return "<button type='button' onclick='appr(".$id.",\"".$qr['name']."\");'>Approve</button>";

जिसके परिणामस्वरूप इस एचटीएमएल में:

<button type='button' onclick='appr(3,"Dave O'Shea");'>Approve</button>

जावास्क्रिप्ट फ़ंक्शन इस तरह दिखता है।

function appr(id,name){
  // some code here...
  alert(name);
}

सिंगल कोट्स वाले स्ट्रिंग्स को छोड़कर, कोड ठीक काम करता है, जो विफल रहता है। कोई विचार क्यों?

0
ubay25 31 पद 2019, 02:49

1 उत्तर

सबसे बढ़िया उत्तर

आपके कोड में, सिंगल कोट्स विशेषता सीमाओं को दर्शाते हैं:

onclick='appr(
        ^

इसलिए पहला ' जो बाद में आएगा वह विशेषता मान को समाप्त कर देगा।

आप 's को HTML निकायों के साथ प्रतिस्थापित करके इसे ठीक कर सकते हैं, जिसके परिणामस्वरूप इसके बजाय उद्धरण चिह्न होते हैं, ताकि जेनरेट किया गया HTML बाहर आ जाए

<button type='button' onclick='appr(3,"Dave O&quot;Shea");'>Approve</button>
<button onclick='alert(&quot;foo&quot)'>Test</button>

लेकिन इनलाइन हैंडलर से पूरी तरह से बचना और श्रोताओं को इसके बजाय जावास्क्रिप्ट के साथ जोड़ना बेहतर होगा। उदाहरण के लिए, प्रत्येक बटन के लिए, संबंधित id और name वाली किसी वस्तु को किसी सरणी में धकेलें, और उस सरणी को किसी तरह क्लाइंट की प्रतिक्रिया में शामिल करें - उदाहरण के लिए, JSON को एक स्क्रिप्ट में डालकर टैग करना और उस स्क्रिप्ट टैग सामग्री को चुनना/पार्स करना। फिर सरणी पर पुनरावृति करें और प्रत्येक बटन पर एक श्रोता जोड़ें। कुछ इस तरह:

// retrieve array however you want
const arr = [
  { id: 3, name: "Dave O'Shea" },
  // more objects
];
const buttons = document.querySelectorAll('button');
for (const [i, { id, name }] of arr.entries()) {
  button[i].addEventListener('click', () => {
    appr(id, name);
  });
}

या उन पंक्तियों के साथ कुछ और। एचटीएमएल मार्कअप में तत्व विशेषताओं के रूप में हैंडलर डालने से बचें।

0
CertainPerformance 31 पद 2019, 00:02