<a> लिंक पर क्लिक करते समय पुष्टिकरण संवाद कैसे प्रदर्शित किया जाए?


268

मैं चाहता हूं कि यह लिंक एक जावास्क्रिप्ट संवाद हो जो उपयोगकर्ता से पूछता है " क्या आप सुनिश्चित हैं? वाई / एन ”।

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

यदि उपयोगकर्ता "हां" पर क्लिक करता है, तो लिंक लोड होना चाहिए, अगर "नहीं" कुछ भी नहीं होगा।

मुझे पता है कि फॉर्म में ऐसा कैसे करना है कि onclickएक फ़ंक्शन का उपयोग करके जो रिटर्न trueया false। लेकिन मैं इसे एक <a>लिंक के साथ कैसे करूं ?


हम इस कोणीय को कैसे प्राप्त कर सकते हैं। 1
भास्कर अरनी

जवाबों:


596

इनलाइन इवेंट हैंडलर

सबसे सरल तरीके से, आप confirm()इनलाइन onclickहैंडलर में फ़ंक्शन का उपयोग कर सकते हैं ।

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

उन्नत ईवेंट हैंडलिंग

लेकिन आम तौर पर आप अपने HTML और जावास्क्रिप्ट को अलग करना चाहते हैं , इसलिए मेरा सुझाव है कि आप इनलाइन इवेंट हैंडलर का उपयोग न करें, लेकिन अपने लिंक पर एक क्लास लगाएं और एक इवेंट श्रोता को इसमें जोड़ें।

<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>

यह उदाहरण केवल आधुनिक ब्राउज़रों में काम करेगा (पुराने IE के लिए आप उपयोग कर सकते हैं 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
इस रूप में सरल कुछ के लिए, क्या HTML और जावास्क्रिप्ट को अलग करना वास्तव में आवश्यक है? इस तरह के एक सरल और छोटे फ़ंक्शन इनलाइन को छोड़ कर आप किन मुद्दों पर ध्यान देंगे?
सियारन गलाघेर

5
@CiaranG यह हमेशा इस तरह शुरू होता है :), फिर आप इसे जोड़ते हैं और आदि, अगर आप चिंताओं को अलग करने का प्रबंधन करते हैं, तो आप इन इनलाइन हैंडलर में से अधिकांश से छुटकारा पाने पर क्लीनर महसूस करेंगे। उन्हें आपके HTML में कुछ नहीं करना है। कम से कम मेरी राय में, और कम से कम ज्यादातर मामलों में। हमेशा विशेष परिस्थितियां होती हैं - आलस्य उनमें से एक नहीं होना चाहिए।
kapa

@Ulysnep आपके संपादन सुझाव के अनुसार confirm(…)इनलाइन हैंडलर के बाद अर्धविराम को छोड़ते समय एक बग था । मैं इसे पुन: पेश नहीं कर सका।
user4642212

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()(जैसा कि नीचे दिए गए टिप्पणियों में bažmegakapa द्वारा सुझाया गया है):

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()फ़ंक्शन को पास किया जाता है।

संदर्भ:


धन्यवाद। लघु इनलाइन पुष्टि समाधान ने काम किया। आप इनलाइन कोड से बचने का सुझाव क्यों देते हैं? मैं आमतौर पर स्पष्ट कारणों के लिए इनलाइन सीएसएस से दूर रहता हूं, लेकिन लघु जावास्क्रिप्ट स्निपेट में क्या कारण हैं?
क्रिस्टोफर

ठीक उसी कारण के लिए कि इन-लाइन सीएसएस असावधान है, इसे बनाए रखना कठिन है, और यह HTML को गन्दा करता है और आवश्यकता होने पर अपडेट करने के लिए काम की एक विषम राशि की आवश्यकता होती है।
डेविड का कहना है कि मोनिका

मैं इनलाइन हैंडलर का उपयोग न करने की बात से सहमत हूं। लेकिन अगर हम स्क्रिप्ट को किसी भी तरह से संलग्न करते हैं, तो उन्नत मॉडल का उपयोग किया जाना चाहिए ( addEventListener)। हालांकि +1।
12:51

@ bažmegakapa: मैं ... सहमत हूँ; लेकिन मुझे कबूल करना चाहिए कि मुझे 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>

@ @ पापा द्वारा दिया गया Ans बहुत आसान और कम गन्दा है
dipenparmar12

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

यदि आप अपने ईवेंट हैंडलर को addEventListener (या अटैचमेंट) का उपयोग करके संलग्न करते हैं तो यह विधि उपरोक्त उत्तरों में से कुछ से भिन्न है।

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);

यदि आप पुराने IE के बारे में देखभाल कर रहे हैं, तो मत भूलना window.event
12:53

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

शीघ्रता के लिए PHP, HTML और JAVASCRIPT का उपयोग करना

अगर कोई किसी एकल फ़ाइल में php, html और जावास्क्रिप्ट का उपयोग करना चाहता है, तो नीचे दिया गया जवाब मेरे लिए काम कर रहा है .. मैं लिंक के लिए बूटस्ट्रैप आइकन "कचरा" के उपयोग से जुड़ा हुआ हूं।

<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>

कारण मैंने बीच में php कोड का उपयोग किया है क्योंकि मैं शुरू से ही इसका उपयोग नहीं कर सकता हूँ।

नीचे दिए गए कोड मेरे लिए काम नहीं करते: -

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>";

और मैंने इसे पहली बार कोड के रूप में संशोधित किया है और फिर मुझे बस उसी चीज़ की आवश्यकता है जो मुझे चाहिए। मुझे आशा है कि मैं अपने मामले के किसी भी व्यक्ति की मदद कर सकता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.