ট্যাগের অনক্লিক অ্যাট্রিবিউট থেকে উদ্ভূত কাস্টম ফাংশন থেকে কল প্রতিরোধ ডিফল্ট কল করতে ইভেন্ট অ্যাক্সেস করুন


119

আমার এই জাতীয় লিঙ্ক আছে:

<a href="#" onclick="myfunc({a:1, b:'hi'})" />click</a>
<a href="#" onclick="myfunc({a:3, b:'jo'})" />click</a>

এবং আমি একটি preventDefault()অভ্যন্তরটি করতে চাই myfunc(), কারণ #লিঙ্কে ক্লিক করার সময় ঠিকানা বারে একটি যুক্ত করা হবে (না করে return false;বা না করে href='javascript:void(0);')

এটা কি সম্ভব? আমি কি ঘটনা ভিতরে পেতে পারি?myfunc()


6
মিথ্যা রিটার্ন দিয়ে কী হয়েছে?
অ্যালেক্স

5
এটি প্রচারও বন্ধ করে দেয়
ওমু

4
return falseকেবল jQuery এর মধ্যে প্রচার বন্ধ করে।
ক্রুজনমো

উত্তর:


157

আমি বিশ্বাস করি যে আপনি eventফাংশন ইনলাইনটিতে প্রবেশ করতে পারেন যা eventডাব্লু 3 সি অনুবর্তী ব্রাউজারগুলিতে উত্থাপিত ইভেন্টের জন্য বস্তু হবে (অর্থাত্ IE এর পুরানো সংস্করণগুলি দেখতে এখনও আপনার ইভেন্ট হ্যান্ডলার ফাংশনটির ভিতরে সনাক্তকরণ প্রয়োজন হবে window.event)।

একটি দ্রুত উদাহরণ

function sayHi(e) {
   e.preventDefault();
   alert("hi");
}
<a href="http://google.co.uk" onclick="sayHi(event);">Click to say Hi</a>

  1. এটি যেমন রয়েছে তেমন চালান এবং লক্ষ্য করুন যে লিঙ্কটি সতর্কতার পরে গুগলে পুনর্নির্দেশ করে না।
  2. তারপরে হ্যান্ডলারের eventমধ্যে onclickপাসকে অন্য কোনও মতো পরিবর্তন eকরুন, রান ক্লিক করুন, তারপরে লক্ষ্য করুন যে পুনঃনির্দেশটি সতর্কতার পরে ঘটবে (ফলাফল ফলকটি সাদা হয়ে যায়, একটি পুনর্নির্দেশ প্রদর্শন করে)।

5
ঠিক আছে, আমি দেখতে পাচ্ছি আমার প্যারামিটারটি দ্বিতীয় করাmyfunc(event, {a:123, b:"asdas"})
ওমু

1
@ ওমু পাস-ইন আর্গুমেন্ট, ইভেন্টটি যে কোনও জায়গায় হতে পারে, যতক্ষণ না এটি ফাংশনের জন্য সংজ্ঞায়িত প্যারামিটার তালিকার সঠিক জায়গায় থাকে ততক্ষণ প্রথম হওয়া উচিত নয়। উদাহরণস্বরূপ, function myfunc(o, e) {...}তারপর এটি হিসাবে বলা যেতে পারে myfunc({a:1, b:'hi'}, event)
ক্যাটিজ

2
আমি মনে করি আপনাকে ইভেন্ট অবজেক্টটি স্পষ্টভাবে পাস এবং ক্যাপচার করতে হবে না। আপনি কেবল ফাংশনে এটি উল্লেখ করতে পারেন। কেউ দয়া করে নিশ্চিত করতে পারেন? মানে, ইভেন্ট ব্যতীত এই function sayHi() { event.preventDefault(); alert("hi"); }
কোডটিও

111

সহজ সমাধানটি হ'ল:

<a href="#" onclick="event.preventDefault(); myfunc({a:1, b:'hi'});" />click</a>

কোনও জেএস সক্ষম ব্রাউজারের ফ্যালব্যাক সহ নথির জন্য ক্যাশে বুস্টিং করার এটি আসলে একটি ভাল উপায় (কোনও জেএস না হলে ক্যাশে বুস্টিং নেই)

<a onclick="
if(event.preventDefault) event.preventDefault(); else event.returnValue = false;
window.location = 'http://www.domain.com/docs/thingy.pdf?cachebuster=' + 
Math.round(new Date().getTime() / 1000);" 
href="http://www.domain.com/docs/thingy.pdf">

যদি জাভাস্ক্রিপ্ট সক্ষম করা থাকে তবে এটি ক্যাশে বস্টিং কোয়েরি স্ট্রিং সহ পিডিএফটি খোলায়, যদি তা কেবল পিডিএফটি খোলেন না।


ক্যাশে বুস্টিংয়ের পরে যদি আপনি থাকেন তবে সেই লিঙ্কটি পুনরায় লেখার জন্য কেবল সার্ভার সাইড টেক ব্যবহার করতে পারেন।
এমপেন

এটি আরও ভাল হবে তবে সার্ভারের সাইড কোডটিতে আমার অ্যাক্সেস নেই। আমি যা পেয়েছি তা নিয়ে কাজ করছি।
জুলু

11

এটা চেষ্টা কর:

<script>
    $("a").click(function(event) {
        event.preventDefault(); 
    });
</script>

কোডটিকে আরও জটিল করে তুলতে প্রতিটি ক্লিক ইভেন্টের জন্য এর জন্য একটি <script> ট্যাগ প্রয়োজন।
somid3

এটিতে jQuery প্রয়োজন, যা উপস্থিত থাকতে পারে পূর্বশর্ত হওয়া উচিত নয়।
অনিয়মিত শেড

এখানেও দ্বিমত পোষণ করুন, একটি ইনলাইন ফাংশনের একটি সাধারণ পার্স আরও কার্যকর এবং কম কোড।
শ্যানন হচকিনস

1
@ somid3, যখন jQuery এর নয় প্রয়োজনীয় , যদি আপনি কর্মক্ষমতা সম্পর্কে উদ্বিগ্ন হন, আপনি একটি একক নিয়োজিত ইভেন্ট হ্যান্ডলার যাতে আপনি কেবলমাত্র ভালো পৃষ্ঠাতে সকল নোঙ্গর জন্য একটি একক শ্রোতা সংযোজনের করছি ব্যবহার করতে পারেন: $("body").on("click","a",function(e) { e.preventDefault() });। উভয় ক্ষেত্রেই, কোনও সমাধানই কার্যকরভাবে পারফরম্যান্সকে প্রভাবিত করবে না।
কাইলমিত

7
<script type="text/javascript">
$('a').click(function(){
   return false;
});
<script>

2
এটি প্রতিটি নোঙ্গরের ক্ষেত্রে প্রযোজ্য, এবং সমস্ত লিঙ্কগুলি ভেঙে দেবে, এছাড়াও জাভাস্ক্রিপ্টটি পৃষ্ঠাতে জাভাস্ক্রিপ্ট পাশাপাশি Quোকানো প্রয়োজন।
শ্যানন হচকিনস

প্লাস, jQuery ব্যবহার করার সময়, return falseএটি সুপারিশ করা হয় না কারণ এটি সেই উপাদানটিতে থাকা সমস্ত ইভেন্ট হ্যান্ডলারকে চলমান থেকে বাধা দেয় এবং ইভেন্টটিকে উচ্চতর উপাদানগুলিতে বুদবুদ হওয়া থেকে বিরত রাখবে।
স্টিজন ডি উইট

6

লিঙ্কগুলিতে এবং একটি জাভাস্ক্রিপ্টগুলিতে একটি অনন্য ক্লাস যুক্ত করুন যা এই শ্রেণীর সাথে লিঙ্কগুলিতে ডিফল্ট প্রতিরোধ করে:

<a href="#" class="prevent-default" 
   onclick="$('.comment .hidden').toggle();">Show comments</a>

<script>
  $(document).ready(function(){

    $("a.prevent-default").click(function(event) {
         event.preventDefault(); 
          });
  });
</script>

বিশ্বব্যাপী সমাধানের জন্য আকর্ষণীয় পন্থা।
এফেক্ট করুন

5

আপনি কি কোনও ট্যাগ থেকে কেবল href বৈশিষ্ট্যটি সরাতে পারবেন না?


1
হ্যাঁ, এটিও একটি বিকল্প, যদিও ডিফল্টরূপে লিঙ্কটির আন্ডারলাইন থাকবে না এবং জাভাস্ক্রিপ্ট বন্ধ করা থাকলে সেখানে যাওয়ার জন্য Href হবে না
ওমু

4

আমি মনে করি যখন আমরা অনক্লিক ব্যবহার করি তখন আমরা ডিফল্টের চেয়ে আলাদা কিছু করতে চাই। সুতরাং, অনক্লিকের সাথে আপনার সমস্ত লিঙ্কের জন্য:

$("a[onClick]").on("click", function(e) {
  return e.preventDefault();
});


2

আপনি এইভাবে অনক্লিক করে ইভেন্টটি অ্যাক্সেস করতে পারেন:

<button onclick="yourFunc(event);">go</button>

এবং আপনার জাভাস্ক্রিপ্ট ফাংশনে, আমার পরামর্শ সেই প্রথম লাইনের বিবৃতিটিকে যুক্ত করছে:

function yourFunc(e) {
    e = e ? e : event;
}

তারপরে সর্বত্র এবং ইভেন্ট ভেরিয়েবল হিসাবে ব্যবহার করুন


0

e.preventDefault (); https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault থেকে

বা আপনার পদ্ধতি থেকে মিথ্যা প্রত্যাবর্তন হয়েছে।


1
আপনার উত্তরটি ইতিমধ্যে সরবরাহ করা উত্তরগুলির চেয়ে আলাদা কীভাবে?
দিমিতর স্প্যাসোভস্কি

জিজ্ঞাসিত প্রশ্নে আমাকে আরও স্পষ্টতার জন্য একটি ইউআরএল দেওয়া হয়েছিল
রাহুল সিংহ চৌহান

0

কোনও জেএস লাইব্রেরি বা jQuery ছাড়াই। সম্ভব হলে একটি দুর্দান্ত পপআপ উইন্ডো খুলতে। সাধারণ লিঙ্কটি খুলতে নিরাপদে ব্যর্থ।

<a href="https://acme.com/" onclick="onclick="openNewWindow(event, this.href);">...</a>

এবং সহায়ক ফাংশন:

function openNewWindow(event, location) {
  if (event.preventDefault && event.stopImmediatePropagation) { 
    event.preventDefault(); 
    event.stopImmediatePropagation(); 
  } else {
    event.returnValue = false; 
  }
  window.open(location, 'targetWindow', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=800,height=450');
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.