2012-05-11 23 views
11

पर आग लगाने के लिए window.onbeforeunload का कारण बन रहा है। मैं Chosen नामक एक ड्रॉप डाउन विजेट का उपयोग कर रहा हूं जिसमें एक href javascript:void(0) के साथ एक एंकर है। जब मैं ड्रॉप डाउन पर क्लिक करता हूं तो यह काम करता है लेकिन आईई पर यह एक नया onbeforeunload ईवेंट चलाता है जो निराशाजनक है क्योंकि एप्लिकेशन पुष्टि करता है कि आप छोड़ना चाहते हैं या नहीं। और स्पष्ट रूप से आप उन प्रश्नों को नहीं चाहते हैं जब आप फॉर्म डेटा इनपुट कर रहे हों।एंकर "जावास्क्रिप्ट: शून्य (0)" आईई

क्या चुना गया पुस्तकालय बदलने के बिना इस समस्या से छुटकारा पाने का कोई तरीका है?

दुर्भाग्य से इस:

window.onbeforeunload = function (e) { 
    console.log(window.location); 
}; 

लॉग ऑन करता है नहीं javascript:void(0) या तो है, इसलिए, मैं लक्ष्य यूआरएल की जांच करने के लिए इसका इस्तेमाल नहीं कर सकते।

यह व्यवहार कम से कम IE9 में होता है, और यही वह है जो मैं चिंतित हूं (पुराने आईई नहीं)।

उत्तर

13

एकमात्र समाधान जो मैं देख सकता हूं वह false को onclick लिंक के ईवेंट हैंडलर में वापस करना है। यह आईई को बताएगा कि आप लिंक पर क्लिक करके पेज को बदलने की योजना नहीं बना रहे हैं।

<a href="javascript:void(0);" onclick="doSomething(); return false;">Link</a> 

ही इस तरह से लिखा जा सकता है:

<script> 
    function doSomething() { 
     // do Something 
     return false; 
    } 
</script> 

<a href="javascript:void(0);" onclick="return doSomething();">Link</a> 
+0

हाँ, पर मैं नहीं बल्कि तीसरे पक्ष के पुस्तकालय को संशोधित नहीं चाहते हैं। मेरे द्वारा उपयोग किए जाने वाले चुने गए ड्रॉप डाउन में यह लिंक है। – Tower

+0

एचएम। क्या इस लिंक में कोई 'ऑनक्लिक' घटना है? यदि नहीं, तो आप इसे गतिशील रूप से बांध सकते हैं। – VisioN

+0

मैं बस ऐसा करने की योजना बना रहा हूं ... एक क्लिक ईवेंट बाध्यकारी और इसे रद्द कर रहा हूं। – Tower

2

मैं लंगर के खिलाफ क्लिक घटनाओं और फायरिंग से onBeforeUnload को रोकने के लिए घटना को रद्द करने के सुनने के समाप्त हो गया:

$chosen.find('.chzn-single').click(function() { 
    return false; 
}); 
1

था एक ही समस्या। बस आपका प्रश्न मिला। मेरे समाधान तुम मेरे मामले में हर चुना ड्रॉपडाउन सूची एंकर टैग करने के लिए onclick जोड़ने का श्रेय और फोन window.onbeforeunload = अशक्त

की जरूरत है, है, मैं

$(".chzn-single").attr("onclick", "window.onbeforeunload = null;"); 

डाल दिया चुना पुस्तकालय और यह स्थापित करने के बाद ठीक काम करता है

+0

क्या यह विंडो को रोक नहीं पाएगा। किसी चयनित लिंक तत्व पर क्लिक करने के बाद काम करने से पहले? –

0

इसके लिए href का उपयोग न करें। न्यूनतम अतिरिक्त काम के साथ एक सरल समाधान:

मैं एक सीएसएस वर्ग का उपयोग करना पसंद करता हूं जो एक href को अनुकरण करता है, जाहिर है कि आप अपनी वेबसाइट के अनुरूप इस वर्ग के रंग और स्टाइल को बदल देंगे, लेकिन इस उद्देश्य के लिए, यह मानक नीली रेखांकित है लिंक

<style> 
    .linkSimulate 
    { 
     cursor: pointer; 
     COLOR: blue; 
     text-decoration: underline; 
    } 
</style> 

तो एक सरल लंगर

<a onclick = "do_save();" class ="linkSimulate">Link</a> 
2

मुझे पता है कि यह बहुत पुराना है का उपयोग करें ... लेकिन मैं अपने काम के लिए हाल ही में इस भर में आ गए हैं। दुर्भाग्यवश हमें अभी भी आईई 9 का समर्थन करने के लिए मजबूर किया गया है। हम इस प्रोजेक्ट पर Angular.js का उपयोग कर रहे हैं जो उपयोगकर्ता को data-ng-click के साथ एंकर टैग पर क्लिक करते समय गतिशील रूप से एक पृष्ठ पर लोड करेगा।

आपके उदाहरण में आपको केवल ईवेंट को पास करना होगा और फ़ंक्शन के भीतर डिफ़ॉल्ट कार्रवाई को रोकें और इसे बुलबुले से रोक दें।यह सब तुम क्या करने के लिए होता है ऐसा करने के लिए यह है:

// Inside the View 
<a href="javascript:void(0)" data-ng-click="addStuff($event)">Add Stuff</a> 

// Inside the controller 
function addStuff($event) { 
    $event.preventDefault(); 
    $event.stopPropagation(); 
    // Do Something 
}; 

मुझे आशा है कि यह बहुत देर नहीं हुई है और मुझे आशा है कि यह मदद करता है:

// Inside the HTML 
{...} 
<a href="javascript:void(0);" onclick="doSomething(evt);">Link</a> 
{...} 
<script> 
    function doSomething(evt) { 
     evt.preventDefault(); 
     evt.stopPropagation(); 
     // Do Something 
    }; 
</script> 
{...} 

कोणीय में सब मैंने किया था निम्नलिखित था अन्य शामिल हैं।

0

यहां तक ​​कि अगर यह सवाल पुराना है, मैं @Bartosz के जवाब anhanced किया है, @Oiva स्कूल की टिप्पणी में समस्या का समाधान:

इस के बाद काम करने से window.onbeforeunload बंद नहीं होंगे एक चुने हुए लिंक तत्व पर क्लिक करना? - var thisOnClick;

नीचे ठीक से, एचटीएमएल onclick संपत्ति बनाने के लिए ओवरराइड या घटना को रद्द नहीं करने के लिए अपने समाधान है:

  var thisOnClick; 

      $.each($(' .container a '), function(){ 

       thisOnClick = $(this).attr('onclick'); 

       if (typeof thisOnClick == 'undefined') { 

        $(this).attr('onclick', 'window.onbeforeunload = null;'); 

       } else if (typeof thisOnClick == 'string' && thisOnClick.indexOf('window.onbeforeunload') == -1 ) { 

       $(this).attr('onclick', thisOnClick + 'window.onbeforeunload = null;'); 
      } 

     }); 
संबंधित मुद्दे