<a> লিঙ্কটিতে ক্লিক করার সময় একটি নিশ্চিতকরণ ডায়ালগ কীভাবে প্রদর্শিত করবেন?


268

আমি এই লিঙ্কটিতে একটি জাভাস্ক্রিপ্ট ডায়ালগ রাখতে চাই যা ব্যবহারকারীকে জিজ্ঞাসা করে “ আপনি কি নিশ্চিত? Y / N "।

<a href="delete.php?id=22">Link</a>

যদি ব্যবহারকারী "হ্যাঁ" ক্লিক করেন, লিঙ্কটি লোড করা উচিত, "না" হলে কিছুই হবে না।

ফর্মগুলিতে এটি কীভাবে করতে হয় তা আমি জানি onclickযা ফিরে আসে trueবা আসে এমন কোনও ফাংশন ব্যবহার করে false। তবে আমি কীভাবে এটি একটি <a>লিঙ্ক দিয়ে করব?


কীভাবে আমরা এই angularjs1.x অর্জন করতে পারেন
ভাস্কর আড়ানী

উত্তর:


596

ইনলাইন ইভেন্ট হ্যান্ডলার

সর্বাধিক সহজ উপায়ে, আপনি confirm()একটি ইনলাইন onclickহ্যান্ডলারে ফাংশনটি ব্যবহার করতে পারেন ।

<a href="delete.php?id=22" onclick="return confirm('Are you sure?')">Link</a>

উন্নত ইভেন্ট হ্যান্ডলিং

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

<a href="delete.php?id=22" class="confirmation">Link</a>
...
<script type="text/javascript">
    var elems = document.getElementsByClassName('confirmation');
    var confirmIt = function (e) {
        if (!confirm('Are you sure?')) e.preventDefault();
    };
    for (var i = 0, l = elems.length; i < l; i++) {
        elems[i].addEventListener('click', confirmIt, false);
    }
</script>

এই উদাহরণটি কেবলমাত্র আধুনিক ব্রাউজারগুলিতে কাজ করবে (পুরানো আই-এস-এর জন্য আপনি ব্যবহার করতে পারেন attachEvent(), returnValueএবং getElementsByClassName()jQuery এর মতো একটি লাইব্রেরি ব্যবহার করতে বা ব্যবহার করতে পারেন যা ক্রস-ব্রাউজার সমস্যার ক্ষেত্রে সহায়তা করবে)। আপনি MDN এ এই উন্নত ইভেন্ট হ্যান্ডলিং পদ্ধতি সম্পর্কে আরও পড়তে পারেন ।

jQuery এর

আমি jQuery ফ্যানবয় হিসাবে বিবেচনা করা থেকে অনেক দূরে থাকতে চাই তবে DOM হেরফের এবং ইভেন্ট হ্যান্ডলিং এমন দুটি ক্ষেত্র যেখানে এটি ব্রাউজারের পার্থক্যের সাথে সর্বাধিক সহায়তা করে। কেবল মজাদার জন্য, এখানে jQuery এর সাথে দেখতে কেমন হবে :

<a href="delete.php?id=22" class="confirmation">Link</a>
...
<!-- Include jQuery - see http://jquery.com -->
<script type="text/javascript">
    $('.confirmation').on('click', function () {
        return confirm('Are you sure?');
    });
</script>

সত্যিই কি এত সহজ ছিল! আমি কি বিব্রত নাকি! আমি কেবল ধরে নিয়েছি যে কেবল ফর্মগুলিতে কাজ করেছে। নিশ্চিত ডায়ালগটি কি প্রতিটি ক্লিকযোগ্য উপাদানগুলির জন্য কাজ করে?
ক্রিস্টোফার

1
@ টফ কনফার্ম ডায়ালগের নির্দিষ্ট উপাদানগুলির সাথে নিজেই কিছু করার নেই।
কপা

1
এর মতো সাধারণ কোনও কিছুর জন্য, এইচটিএমএল এবং জাভাস্ক্রিপ্ট আলাদা করা কি সত্যই দরকার? এত সাধারণ এবং সংক্ষিপ্ত ফাংশনটি ইনলাইন রেখে আপনি কোন বিষয়গুলির পূর্বে ধারণা করতে পারবেন?
সিয়ানান গ্যালাগার

5
@ কায়রাঞ্জ এটি সর্বদা এটির মতো শুরু হয় :), এরপরে আপনি এটি এবং এটি যুক্ত করুন concerns আপনার এইচটিএমএল এগুলি করার কিছুই নেই। কমপক্ষে আমার মতে এবং কমপক্ষে বেশিরভাগ ক্ষেত্রে। সবসময় বিশেষ পরিস্থিতি থাকে - অলসতার মধ্যে তাদের অন্যতম হওয়া উচিত নয়।
কাপা

@ ইউলিসনেপ আপনার সম্পাদনা পরামর্শ অনুসারে confirm(…)ইনলাইন হ্যান্ডলারের পরে সেমিকোলন বাদ দেওয়ার সময় একটি বাগ ছিল । আমি এটি পুনরুত্পাদন করতে পারে না।
ব্যবহারকারী4642212

15

আমি ইন-লাইন জাভাস্ক্রিপ্ট এড়ানো পরামর্শ দিই:

var aElems = document.getElementsByTagName('a');

for (var i = 0, len = aElems.length; i < len; i++) {
    aElems[i].onclick = function() {
        var check = confirm("Are you sure you want to leave?");
        if (check == true) {
            return true;
        }
        else {
            return false;
        }
    };
}​

জেএস ফিডল ডেমো

স্পেসিটি / ফাংশন বজায় রাখার পরেও স্থান হ্রাস করতে উপরের আপডেট হয়েছে:

var aElems = document.getElementsByTagName('a');

for (var i = 0, len = aElems.length; i < len; i++) {
    aElems[i].onclick = function() {
        return confirm("Are you sure you want to leave?");
    };
}

জেএস ফিডল ডেমো

কিছুটা বিলেটেড আপডেট, ব্যবহার করার জন্য addEventListener()( বাইমেগাকাপার পরামর্শ অনুসারে , নীচের মন্তব্যে):

function reallySure (event) {
    var message = 'Are you sure about that?';
    action = confirm(message) ? true : event.preventDefault();
}
var aElems = document.getElementsByTagName('a');

for (var i = 0, len = aElems.length; i < len; i++) {
    aElems[i].addEventListener('click', reallySure);
}

জেএস ফিডল ডেমো

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

function reallySure (event) {
    var message = 'Are you sure about that?';
    action = confirm(message) ? true : event.preventDefault();
}

function actionToFunction (event) {
    switch (event.target.tagName.toLowerCase()) {
        case 'a' :
            reallySure(event);
            break;
        default:
            break;
    }
}

document.body.addEventListener('click', actionToFunction);

জেএস ফিডল ডেমো

ইভেন্ট-হ্যান্ডলিং bodyউপাদানটির সাথে সংযুক্ত থাকে, যার মধ্যে সাধারণত অন্যান্য, ক্লিকযোগ্য, এমন একটি উপাদান থাকে যা আমি ক্লিকটির মাধ্যমে actionToFunctionকী করব তা নির্ধারণ করতে একটি অন্তর্বর্তী ফাংশন ( ) ব্যবহার করেছি । যদি ক্লিক করা উপাদানটি কোনও লিঙ্ক হয়, এবং তাই এর একটি tagNameথাকে a, ক্লিক-হ্যান্ডলিংটি reallySure()ফাংশনে পৌঁছে দেওয়া হয় ।

তথ্যসূত্র:


ধন্যবাদ. সংক্ষিপ্ত ইনলাইন কনফার্ম সমাধান কাজ করেছে। আপনি ইনলাইন কোড এড়ানো পরামর্শ দিচ্ছেন কেন? আমি সাধারণত স্পষ্ট কারণে ইনলাইন সিএসএস থেকে দূরে রাখি, তবে সংক্ষিপ্ত জাভাস্ক্রিপ্ট স্নিপেটগুলির কারণগুলি কী?
ক্রিস্টোফার

ইন লাইন সিএসএস অবিশ্বাস্য ঠিক ঠিক একই কারণে এটি বজায় রাখা আরও শক্ত এবং এটি মেসিয়ার এইচটিএমএল বাড়ে এবং প্রয়োজনীয়তাগুলি পরিবর্তিত হলে আপডেট করার জন্য একটি প্রচুর পরিমাণে কাজের প্রয়োজন হয়।
ডেভিড বলেছেন মনিকা

আমি ইনলাইন হ্যান্ডলারগুলি ব্যবহার না করার বিষয়টির সাথে একমত। তবে আমরা যদি যাইহোক স্ক্রিপ্টে আমাদের হ্যান্ডলারগুলি সংযুক্ত করি তবে উন্নত মডেলটি ব্যবহার করা উচিত ( addEventListener)। যদিও +1
কাপা

@ বামেগাকাপা: আমি ... রাজি হই; তবে আমি অবশ্যই স্বীকার করব যে আমি এখনও addEventListener()মডেলটির সাথে স্বাচ্ছন্দ্য বোধ করতে পারি না ।
ডেভিড বলেছেন মনিকা

আপনি প্রতিস্থাপন করতে পারেন if(check == true)সঙ্গে if(check)
বেনামে


5

আপনি এটি ব্যবহার করে দেখতে পারেন:

<a href="" onclick="if (confirm('Delete selected item?')){return true;}else{event.stopPropagation(); event.preventDefault();};" title="Link Title">
    Link Text
</a>

@ কেপা দ্বারা প্রদত্ত উত্তরগুলি খুব সহজ এবং কম অগোছালো
ডিপেনপারমার

1

jAplus

আপনি জাভাস্ক্রিপ্ট কোড না লিখে এটি করতে পারেন

<head>
   <script src="/path/to/jquery.js" type="text/javascript" charset="utf-8"></script>
   <script src="/path/to/jquery.Aplus.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
...
   <a href="delete.php?id=22" class="confirm" title="Are you sure?">Link</a>
...
</body>

ডেমো পৃষ্ঠা


11
ভাগ করে নেওয়ার জন্য ধন্যবাদ, তবে অবশ্যই আপনি জাভাস্ক্রিপ্ট ব্যবহার করছেন, আপনি খুব সাধারণ কিছু পরিচালনা করার জন্য একটি সম্পূর্ণ লাইব্রেরি যুক্ত করছেন। এটা কি মূল্য? আমি এই গ্রন্থাগারটি জানি না, আমি এটি সম্পর্কে পড়ব, আপনি যদি এটি অন্য উদ্দেশ্যেও ব্যবহার করেন তবে এটি অতিরিক্ত লোডের জন্য মূল্যবান হতে পারে ...
মার্কোস বুয়ার্ক

1
এই সহজ জিনিস জন্য দুটি গ্রন্থাগার?
মারাকুজা-রস

0

আপনি যদি অ্যাডেন্টেন্টলিস্টনার (বা সংযুক্তি) ব্যবহার করে আপনার ইভেন্ট হ্যান্ডলারটি সংযুক্ত করেন তবে এই পদ্ধতিটি উপরের উত্তরগুলির চেয়ে কিছুটা আলাদা।

function myClickHandler(evt) {
  var allowLink = confirm('Continue with link?');
  if (!allowLink) {
    evt.returnValue = false; //for older Internet Explorer
    if (evt.preventDefault) {
      evt.preventDefault();
    }
    return false;
  }
}

আপনি এই হ্যান্ডলারটি এর সাথে সংযুক্ত করতে পারেন:

document.getElementById('mylinkid').addEventListener('click', myClickHandler, false);

অথবা ইন্টারনেট এক্সপ্লোরারের পুরানো সংস্করণগুলির জন্য:

document.getElementById('mylinkid').attachEvent('onclick', myClickHandler);

আপনি যদি পুরানো আইইগুলি সম্পর্কে যত্নশীল হন তবে ভুলে যাবেন না window.event
কপা

0

কেবল মজাদার জন্য, আমি সমস্ত নোঙ্গর ট্যাগগুলিতে একটি ইভেন্ট যুক্ত না করে পুরো দস্তাবেজে একটি একক ইভেন্ট ব্যবহার করতে যাচ্ছি :

document.body.onclick = function( e ) {
    // Cross-browser handling
    var evt = e || window.event,
        target = evt.target || evt.srcElement;

    // If the element clicked is an anchor
    if ( target.nodeName === 'A' ) {

        // Add the confirm box
        return confirm( 'Are you sure?' );
    }
};

আপনার যদি অনেক অ্যাঙ্কর ট্যাগ থাকে তবে এই পদ্ধতিটি আরও কার্যকর হবে। অবশ্যই, আপনি যখন সমস্ত অ্যাঙ্কর ট্যাগযুক্ত ধারকটিতে এই ইভেন্টটি যুক্ত করবেন তখন এটি আরও কার্যকর হয়।


0

বেশিরভাগ ব্রাউজারগুলি কাস্টম বার্তাটি প্রেরণ করে না confirm()

এই পদ্ধতির সাহায্যে আপনার ব্যবহারকারী কোনও <input>ক্ষেত্রের মান পরিবর্তন করে যদি আপনি একটি কাস্টম বার্তা সহ একটি পপআপ প্রদর্শন করতে পারেন ।

আপনি এটি কেবলমাত্র কিছু লিঙ্ক , বা আপনার পৃষ্ঠায় থাকা অন্যান্য HTML উপাদানগুলিতে প্রয়োগ করতে পারেন । নিশ্চিতকরণের প্রয়োজন এবং নীচের কোডটি প্রয়োগ করুন এমন সমস্ত লিঙ্কগুলিতে কেবল একটি কাস্টম শ্রেণি যুক্ত করুন:

$(document).ready(function() {
  let unsaved = false;
  // detect changes in all input fields and set the 'unsaved' flag
  $(":input").change(() => unsaved = true);
  // trigger popup on click
  $('.dangerous-link').click(function() {
    if (unsaved && !window.confirm("Are you sure you want to nuke the world?")) {
      return; // user didn't confirm
    }
    // either there are no unsaved changes or the user confirmed
    window.location.href = $(this).data('destination');
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<input type="text" placeholder="Nuclear code here" />
<a data-destination="https://en.wikipedia.org/wiki/Boom" class="dangerous-link">
    Launch nuke!
</a>

এটি কীভাবে কাজ করে তার একটি পূর্বরূপ পেতে উদাহরণের ইনপুট মানটি পরিবর্তন করে দেখুন।


-2

অনুরোধ জানাতে পিএইচপি, এইচটিএমএল এবং জাভাস্ক্রিপ্ট ব্যবহার করা হচ্ছে

কেবলমাত্র যদি কোনও একক ফাইলে পিএইচপি, এইচটিএমএল এবং জাভাস্ক্রিপ্ট ব্যবহার করার সন্ধান করে তবে নীচের উত্তরটি আমার পক্ষে কাজ করছে .. আমি লিঙ্কটির জন্য বুটস্ট্র্যাপ আইকন "ট্র্যাশ" ব্যবহারের সাথে সংযুক্ত করেছি।

<a class="btn btn-danger" href="<?php echo "delete.php?&var=$var"; ?>" onclick="return confirm('Are you sure want to delete this?');"><span class="glyphicon glyphicon-trash"></span></a>

মাঝখানে পিএইচপি কোড ব্যবহার করার কারণ হ'ল আমি প্রথম থেকেই এটি ব্যবহার করতে পারি না ..

নীচের কোডটি আমার পক্ষে কাজ করে না: -

echo "<a class='btn btn-danger' href='delete.php?&var=$var' onclick='return confirm('Are you sure want to delete this?');'><span class='glyphicon glyphicon-trash'></span></a>";

এবং আমি এটি 1 ম কোডের মতোই সংশোধন করেছি তারপরে আমি যা যা প্রয়োজন ঠিক তেমন চালাই I আমি আশা করি যে আমি আমার মামলায় জড়িত কাউকে সহায়তা করতে পারি।

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