একটি <a> এ জাভাস্ক্রিপ্ট কোড লাগানোর বিভিন্ন পদ্ধতির মধ্যে পার্থক্য কী?


87

আমি একটি <a>ট্যাগে জাভাস্ক্রিপ্ট কোড লাগানোর নিম্নলিখিত পদ্ধতিগুলি দেখেছি :

function DoSomething() { ... return false; }
  1. <a href="javascript:;" onClick="return DoSomething();">link</a>
  2. <a href="javascript:DoSomething();">link</a>
  3. <a href="javascript:void(0);" onClick="return DoSomething();">link</a>
  4. <a href="#" onClick="return DoSomething();">link</a>

আমি কেবল জাভাস্ক্রিপ্ট কোডের পরিবর্তে একটি বৈধ ইউআরএল রাখার চেষ্টা করার ধারণাটি বুঝতে পারি, যদি ব্যবহারকারী জাভাস্ক্রিপ্ট সক্ষম না করে থাকে। তবে এই আলোচনার উদ্দেশ্যে, আমি ধরে নিতে পারি জাভাস্ক্রিপ্ট সক্ষম হয়েছে (তারা এটি ছাড়া লগইন করতে পারে না)।

আমি ব্যক্তিগতভাবে বিকল্প 2 পছন্দ করি কারণ এটি আপনাকে কী চলতে চলেছে তা দেখার অনুমতি দেয় - বিশেষত যেখানে ডিফল্ট করার সময় দরকারী যেখানে ফাংশনটিতে প্যারামিটারগুলি পাস করা হচ্ছে। আমি এটি বেশ খানিকটা ব্যবহার করেছি এবং ব্রাউজারের সমস্যাগুলি খুঁজে পাইনি।

আমি পড়েছি যে লোকেরা 4 টি সুপারিশ করে, কারণ এটি ব্যবহারকারীর অনুসরণ করার জন্য একটি বাস্তব লিঙ্ক দেয় তবে সত্যই, # "বাস্তব" নয়। এটি একেবারে কোথায় যাবে।

এমন কোনও কি আছে যা সমর্থন করে না বা সত্যিই খারাপ, যখন আপনি জানেন যে ব্যবহারকারী জাভাস্ক্রিপ্ট সক্ষম করেছেন?

সম্পর্কিত প্রশ্ন: জাভাস্ক্রিপ্ট লিঙ্কগুলির জন্য Href: "#" বা "জাভাস্ক্রিপ্ট: বাতিল (0)"?


ছোট সিনট্যাক্স ইস্যু: পছন্দ # 2 হওয়া উচিত - <a href="javascript:DoSomething(); "> লিঙ্ক </a> "ফিরতি" ছাড়াই
DRosenfeld

দয়া করে @eyelidless উত্তরের গৃহীত উত্তরটি পরিবর্তন করুন। আমি মনে করি এটি সর্বোত্তম পন্থা, কারণ এটি শব্দার্থবিজ্ঞানের বিষয়ে যত্নশীল।
মিশা পেরেকোস্কি

উত্তর:


69

আমি ম্যাট ক্রুসের জাভাস্ক্রিপ্ট সেরা অভ্যাস নিবন্ধটি বেশ উপভোগ করছি । এতে তিনি বলেছেন যে hrefজাভাস্ক্রিপ্ট কোডটি কার্যকর করতে বিভাগটি ব্যবহার করা একটি খারাপ ধারণা। যদিও আপনি বলেছেন যে আপনার ব্যবহারকারীদের অবশ্যই জাভাস্ক্রিপ্ট সক্ষম থাকতে হবে, এমন কোনও কারণ নেই যে আপনার কোনও জাভাস্ক্রিপ্ট লিঙ্কগুলি hrefলগ-ইন করার পরে জাভাস্ক্রিপ্ট বন্ধ হওয়ার ঘটনা ঘটলে আপনার বিভাগের জন্য ইঙ্গিত করতে পারে এমন কোনও সাধারণ HTML পৃষ্ঠা নেই page আমি আপনাকে এই ফলব্যাক প্রক্রিয়াটি এখনও মঞ্জুর করতে উত্সাহিত করব। এর মতো কিছু "সেরা অনুশীলনগুলি" মেনে চলে এবং আপনার লক্ষ্য অর্জন করবে:

<a href="javascript_required.html" onclick="doSomething(); return false;">go</a>

4
href মান হিসাবে স্থিতি বারে ব্যবহারকারীকে প্রদর্শিত হবে? (নীচের অংশে) আমি কিছুটা বেশি ব্যবহারকারী বান্ধব লিঙ্ক ব্যবহার করে বিবেচনা করব eg "js.html? doSomething" পৃষ্ঠাটি এখনও স্থির এইচটিএমএল হতে পারে। এইভাবে ব্যবহারকারী স্পষ্টতই লিঙ্কগুলির মধ্যে একটি পার্থক্য দেখতে পাবেন।
জিন

7
আপনি শিরোনাম বৈশিষ্ট্যের সাহায্যে এই মানটি ওভাররাইড করতে পারেন, যেমন <a href="javascript_required.html "শিরোনাম=" ডজস কিছু কিছু" onclick="doSomething(); মিথ্যা ফিরুন; "> যান </a>
সুস্পষ্ট

জাভাস্ক্রিপ্ট_ডেস্কায়ার্ড। Html পৃষ্ঠায় অনুরোধগুলি লগ করা এবং ত্রুটির কারণ হয়ে যাওয়া ফাংশনটি লগইন করা ভাল অনুশীলন হওয়া উচিত।
টিমো হুভিনেন

4
আপনি কি এসইওর পরিণতি সম্পর্কে ভেবে দেখেছেন?
ড্যানিয়েলব্লেজকিজ

ম্যাট ক্রুজের জাভাস্ক্রিপ্টটলবক্স.কম অফলাইনে এবং বিক্রয়ের জন্য উপস্থিত রয়েছে।
শোদেব

10

আপনি যখন addEventListener/ ব্যবহার করতে পারবেন তখন আপনি কেন এটি করবেন attachEvent? যদি কোনও hrefপ্রগতিশীল না থাকে তবে একটি ব্যবহার করবেন না <a>, এটি ব্যবহার করুন <button>এবং সেই অনুসারে এটি স্টাইল করুন।


9
লিঙ্কের পরিবর্তে একটি বোতাম ব্যবহার করা অনেক ক্ষেত্রে একটি সম্ভাব্য বিকল্প নয়।
নিকফ

4
কারণ দেখতে দেখতে কুৎসিত লাগে। আপনি লিঙ্কের পাশে একটি আইকন যুক্ত করতে পারেন। ব্রাউজারগুলিতে তাদের একই ফর্ম্যাট করা শক্ত। এবং সাধারণত, লোকেরা বোতামগুলির পরিবর্তে লিঙ্কগুলিতে চলেছে - বেশিরভাগ স্টো ওভার প্রবাহকে দেখুন।
ড্যারিল হেইন

4
দেখতে কুরুচি লাগছে? আপনি যা দেখতে চান তা দেখতে দেখতে এটি দেখতে দুর্দান্ত লাগে। আসলে, আমি মনে করি বোতামগুলিতে লিঙ্কগুলির চেয়ে আসলে আরও স্টাইলের নমনীয়তা রয়েছে যা সেগুলি ইনলাইন তবে সঠিকভাবে ব্রাউজারগুলিতে প্যাডিং নিতে পারে। সিএসএসের সাথে একটি লিঙ্কের মাধ্যমে যে কোনও কিছু করা যায় যা বোতামের সাহায্যে করা যায়।
চোখের পলকহীনতা

4
স্প্যান কীবোর্ড-কেন্দ্রিক হতে পারে না।
বোবিনস

4
এবং বোতামটি (হাঁফানো) শব্দার্থগতভাবে সঠিক। স্প্যান অর্থহীন অর্থহীন। একটি বাটন ঠিক কি লেখক ব্যবহার করতে শব্দার্থগতভাবে ইচ্ছুক।
চোখের পলকহীনতা

5

আপনি অন্য একটি পদ্ধতি ভুলে গেছেন:

5: <a href="#" id="myLink">Link</a>

জাভাস্ক্রিপ্ট কোড সহ:

document.getElementById('myLink').onclick = function() {
    // Do stuff.
};

কোন বিকল্পগুলির মধ্যে সর্বোত্তম সমর্থন রয়েছে বা কোন শব্দার্থগতভাবে সবচেয়ে ভাল তা আমি মন্তব্য করতে পারি না তবে আমি কেবল এটিই বলব যে আমি এই স্টাইলটিকে অনেক বেশি পছন্দ করি কারণ এটি আপনার জাভাস্ক্রিপ্ট কোড থেকে আপনার সামগ্রীকে আলাদা করে দেয়। এটি সমস্ত জাভাস্ক্রিপ্ট কোড একসাথে রাখে, যা বজায় রাখা খুব সহজ (বিশেষত যদি আপনি এটি অনেক লিঙ্কে প্রয়োগ করছেন), এবং আপনি এমনকি এটি একটি বাহ্যিক ফাইলেও রাখতে পারেন যা ক্লায়েন্ট ব্রাউজারগুলির দ্বারা ফাইলাইজ কমাতে এবং ক্যাশে করা যায়।


7
আপনার যদি জেএসের সাথে 20 বা 30 টি আলাদা লিঙ্ক থাকে তবে এটি বেশ ক্লান্তিকর হয়ে উঠতে পারে এবং প্রচুর জেএস দিয়ে শেষ হতে পারে।
ড্যারিল হেইন

এটি জাভাস্ক্রিপ্ট পরিবর্তন করতে এইচটিএমএল মাধ্যমে ওয়াডিং এর চেয়ে আর ক্লান্তিকর নয়। ... বা আপনি jQuery এর মতো কিছু ব্যবহার করতে পারেন যা একাধিক উপাদানগুলিতে ইভেন্টগুলি একবারে পরিবর্তন করতে পারে ... $ ('# মেনু এ')। ক্লিক করুন (ফাংশন () {..})
নিক

4
@ জেকিরিচার্টজ উত্তরটির পেছনে কারণ থাকলে আমি এটি কীভাবে প্রচার করছি তা দেখছি না। আপনি যদি প্রশ্নটি পড়ে থাকেন তবে এটি সত্যই একটি "এই 4 টির মধ্যে কোনটি সেরা" এবং আমি কেবল উল্লেখ করেছি যে তিনি অন্য কোন বিকল্প বিবেচনা করেননি।
নিকফ

ট্রোলোলো চিন্তা করবেন না, এবিসি এবং ডি এর মধ্যে নির্বাচন করার সময়, কেউ ই নির্বাচন করে না
জে কিরচার্টজ

4
@ জে কেরিচার্টজ হ্যাঁ, আমি মনে করি না যে আপনি তখন স্ট্যাক ওভারফ্লোর উদ্দেশ্য পেয়ে গেছেন। যদি কেউ জিজ্ঞাসা করে যে "ওয়েব অ্যাপ তৈরি করা ভাল তবে কোবল বা ফোর্টরান?" এই ব্যক্তিকে বলতে পারা গ্রহণযোগ্য যে তারা সমস্ত সম্ভাবনা বিবেচনা করেনি। প্রশ্নটি পরিষ্কারভাবে জিজ্ঞাসা করছে না " এই চারটি বিষয়ের মধ্যে কোনটি সবচেয়ে ভাল"?
নিকফ

3
<a href="#" onClick="DoSomething(); return false;">link</a>

আমি এটি করব, বা:

<a href="#" id = "Link">link</a>
(document.getElementById("Link")).onclick = function() {
    DoSomething();
    return false;
};

পরিস্থিতি উপর নির্ভর করে। বৃহত্তর অ্যাপ্লিকেশনগুলির জন্য, দ্বিতীয়টি সর্বোত্তম কারণ কারণ এটি আপনার ইভেন্ট কোডটি একীভূত করে।


আপনার যদি জেএসের সাথে 20 বা 30 টি আলাদা লিঙ্ক থাকে তবে এটি বেশ ক্লান্তিকর হয়ে উঠতে পারে এবং প্রচুর জেএস দিয়ে শেষ হতে পারে।
ড্যারিল হেইন

এবং আপনার কোডগুলিতে ক্রেপযুক্ত বাগগুলি ডিবাগ করা খুব কঠিন হতে পারে। আপনার প্রথম উদাহরণ দ্বারা প্রমাণ হিসাবে এই বাগগুলি খুব সহজেই উপস্থিত হয়। :)
নিক 22

1

পদ্ধতি # 2 এর এফএফ 3 এবং আই 7 তে একটি বাক্য গঠন ত্রুটি রয়েছে। আমি # 1 এবং # 3 পদ্ধতি পছন্দ করি, কারণ # 4 '#' দিয়ে ইউআরআইকে নোংরা করে যদিও কম টাইপিংয়ের কারণ হয় ... স্পষ্টতই, অন্যান্য প্রতিক্রিয়া দ্বারা উল্লিখিত হিসাবে, সেরা সমাধান ইভেন্ট হ্যান্ডলিং থেকে পৃথক এইচটিএমএল।


পদ্ধতি # 2 কি? আপনি যখন এগুলি দেখেছেন তখন প্রশ্নগুলি একই ক্রমে থাকে না।
ডায়োডিয়াস - জেমস ম্যাকফার্লেন

আপনি যদি নিশ্চিত হন তবে পদ্ধতি # 4 ইউআরআইকে গোলযোগ করবে নাreturn false । যে কারণে পদ্ধতি 4 সম্ভবত সম্ভবত সেরা (তালিকাবদ্ধ)।
মার আর্লিগসন

4
@ ডায়োডিয়াস, আমি বিশ্বাস করি যে পাইয়ার প্রশ্নের মধ্যে নম্বরযুক্ত তালিকার কথা উল্লেখ করেছিলেন , যা প্রশ্নটি প্রথম স্থানে পোস্ট করার পরে সেখানে ছিল।
পলকহীনতা

1

এর মধ্যে একটি পার্থক্য আমি লক্ষ্য করেছি:

<a class="actor" href="javascript:act1()">Click me</a>

এবং এই:

<a class="actor" onclick="act1();">Click me</a>

এটি যদি উভয় ক্ষেত্রেই থাকে:

<script>$('.actor').click(act2);</script>

তারপরে প্রথম উদাহরণের জন্য, act2আগে চালানো হবে act1এবং দ্বিতীয় উদাহরণে এটি অন্যভাবে হবে।


1

শুধুমাত্র আধুনিক ব্রাউজারগুলি

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
(function(doc){
    var hasClass = function(el,className) {
        return (' ' + el.className + ' ').indexOf(' ' + className + ' ') > -1;
    }
    doc.addEventListener('click', function(e){
      if(hasClass(e.target, 'click-me')){
          e.preventDefault();
          doSomething.call(e.target, e);
      }
    });
})(document);

function doSomething(event){
  console.log(this); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>

<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class="click-me">Button 1</button>
<input class="click-me" type="button" value="Button 2">

</body>
</html>

ক্রস ব্রাউজার

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
(function(doc){
    var cb_addEventListener = function(obj, evt, fnc) {
        // W3C model
        if (obj.addEventListener) {
            obj.addEventListener(evt, fnc, false);
            return true;
        } 
        // Microsoft model
        else if (obj.attachEvent) {
            return obj.attachEvent('on' + evt, fnc);
        }
        // Browser don't support W3C or MSFT model, go on with traditional
        else {
            evt = 'on'+evt;
            if(typeof obj[evt] === 'function'){
                // Object already has a function on traditional
                // Let's wrap it with our own function inside another function
                fnc = (function(f1,f2){
                    return function(){
                        f1.apply(this,arguments);
                        f2.apply(this,arguments);
                    }
                })(obj[evt], fnc);
            }
            obj[evt] = fnc;
            return true;
        }
        return false;
    };
    var hasClass = function(el,className) {
        return (' ' + el.className + ' ').indexOf(' ' + className + ' ') > -1;
    }

    cb_addEventListener(doc, 'click', function(e){
      if(hasClass(e.target, 'click-me')){
          e.preventDefault ? e.preventDefault() : e.returnValue = false;
          doSomething.call(e.target, e);
      }
    });
})(document);

function doSomething(event){
  console.log(this); // this will be the clicked element
}
</script>
<!--... other head stuff ...-->
</head>
<body>

<!--buttons can be used outside of forms https://stackoverflow.com/a/14461672/175071 -->
<button class="click-me">Button 1</button>
<input class="click-me" type="button" value="Button 2">

</body>
</html>

ডকুমেন্টটি প্রস্তুত হওয়ার আগে আপনি এটি চালাতে পারেন, বোতামগুলিতে ক্লিক করা কাজ করবে কারণ আমরা ইভেন্টটি নথিতে সংযুক্ত করি।

সূত্র:

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.