আমি কীভাবে ব্যাকস্পেস কীটি আবার নেভিগেট করা থেকে আটকাতে পারি?


275

আইই তে আমি (ভয়াবহ অ-মানক, তবে কাজ করা) jQuery দিয়ে এটি করতে পারি

if ($.browser.msie)
    $(document).keydown(function(e) { if (e.keyCode == 8) window.event.keyCode = 0;});

তবে ফায়ারফক্সে কাজ করে এমন কোনও উপায়ে বা বোনাসের জন্য ক্রস ব্রাউজারের উপায়ে কি সম্ভব?

রেকর্ড এর জন্য:

$(document).keydown(function(e) { if (e.keyCode == 8) e.stopPropagation(); });

কিছুই করে না

$(document).keydown(function(e) { if (e.keyCode == 8) e.preventDefault(); });

সমস্যাটি সমাধান করে তবে পৃষ্ঠায় অকেজো ব্যাকস্পেস কী সরবরাহ করে যা মূল আচরণের চেয়েও খারাপ than

সম্পাদনা: আমি এটি করার কারণটি হ'ল আমি একটি সাধারণ ওয়েব পৃষ্ঠা তৈরি করছি না তবে একটি বৃহত অ্যাপ্লিকেশন। আপনি ভুল জায়গায় ব্যাকস্পেস টিপেছেন বলে 10 মিনিটের কাজ হারাতে এটি অবিশ্বাস্যরকম বিরক্তিকর। বিরক্তিকর ভুলগুলি প্রতিরোধের অনুপাতটি ব্যাকস্পেস কীটিকে পিছনে নেভিগেট করা থেকে রোধ করে 1000/1 এর উপরে হওয়া উচিত।

সম্পাদনা 2: আমি ইতিহাসের নেভিগেশন রোধ করার চেষ্টা করছি না , কেবল দুর্ঘটনা।

সম্পাদনা: @ ফ্রেন্টনস্ট্রাইন্স মন্তব্য (প্রশ্নটি এত জনপ্রিয় হওয়ায় এখানে সরানো হয়েছে): এটি একটি দীর্ঘমেয়াদী 'ফিক্স', তবে ওয়েবকাইটে এই আচরণটি পরিবর্তন করতে আপনি ক্রোমিয়াম বাগের পিছনে আপনার সমর্থনটি ফেলে দিতে পারেন


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

80
লোকেরা কেন এটিকে অদ্ভুত বলে মনে করে? নেভিগেশনের জন্য ব্যাকস্পেস ব্যবহার করা সত্যিই বোবা শর্টকাট! এমন অনেকগুলি পাঠ্য ক্ষেত্র রয়েছে যা ব্যবহারকারীরা পাঠ্য মুছে ফেলতে চাইতে পারে - একটি দীর্ঘ SO উত্তর রয়েছে তা কল্পনা করুন, কিছু পরীক্ষা করার জন্য অন্য উইন্ডোতে স্যুইচ করুন, এবং তারপরে আপনি ফিরে আসুন এবং সম্পাদনা অঞ্চলটিতে ভুল ক্লিক করুন, একটি শব্দ সরাতে ব্যাকস্পেস টিপুন এবং হঠাৎ ব্রাউজারটি কোনও পৃষ্ঠার পিছনে ফিরে যায় এবং আপনি সবে লিখেছেন এমন সমস্ত কিছুই আপনি সম্ভবত হারিয়ে ফেলেছেন।
পিটার বুফটন

57
আমি কেন এটি করতে চাই? আমি একটি ওয়েব সাইট তৈরি করছি না তবে একটি ওয়েব অ্যাপ্লিকেশন। কিছু ইনপুট ক্ষেত্রগুলি কেবলমাত্র পঠনযোগ্য সে ক্ষেত্রে এগুলি সম্পাদনাযোগ্য দেখায় তবে আপনি যদি ব্যাকস্পেস টিপেন তবে আপনি পৃষ্ঠাটি ছেড়ে যান। ব্যাক
স্পেস প্রেসগুলির অনুপাতটি কোনও

42
প্রশ্নটি কীভাবে এটি করা যায়, এটি একটি ভাল ধারণা কিনা তা সম্পর্কে আপনার মতামত নয়। প্রকল্পের বিবরণ না জেনে আপনার মতামত অর্থহীন। আমার ক্লায়েন্টটি বিশেষত আমার প্রকল্পগুলির একটির জন্য এই আচরণের অনুরোধ করেছে এবং "আপনি কেন এমনটি করতে চান?" সহায়ক হবে।
কোনটি

7
এটি একটি দীর্ঘমেয়াদী 'ফিক্স', তবে ওয়েবকিতে
brentonstrine

উত্তর:


335

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

// Prevent the backspace key from navigating back.
$(document).unbind('keydown').bind('keydown', function (event) {
    if (event.keyCode === 8) {
        var doPrevent = true;
        var types = ["text", "password", "file", "search", "email", "number", "date", "color", "datetime", "datetime-local", "month", "range", "search", "tel", "time", "url", "week"];
        var d = $(event.srcElement || event.target);
        var disabled = d.prop("readonly") || d.prop("disabled");
        if (!disabled) {
            if (d[0].isContentEditable) {
                doPrevent = false;
            } else if (d.is("input")) {
                var type = d.attr("type");
                if (type) {
                    type = type.toLowerCase();
                }
                if (types.indexOf(type) > -1) {
                    doPrevent = false;
                }
            } else if (d.is("textarea")) {
                doPrevent = false;
            }
        }
        if (doPrevent) {
            event.preventDefault();
            return false;
        }
    }
});

6
পাসওয়ার্ড ক্ষেত্রগুলি ভাঙে।
হেমলক

7
হেমলক যেমন বলেছিল - d.type.toUpperCase() === 'PASSWORD'তেমনি পরীক্ষা করে দেখুন । অন্যথায় ভাল দেখাচ্ছে
স্টিভেন্ডেসু

17
যেহেতু আপনি ইতিমধ্যে jQuery ব্যবহার করছেনif( $(d).is( ":input" ) )...
পল আলেকজান্ডার

23
এটি ব্যর্থ হয় যে এটি "পিছনে" কার্যকারিতাটি কালো তালিকাভুক্ত করার পরিবর্তে একটি শ্বেত তালিকা হতে হবে। আপনি d.isContentEditableএখানে একটি চেক যোগ করতে চাইতে পারেন ।
আয়নো

3
আমি বর্তমানে গৃহীত উত্তরের একটি পরিষ্কার সংস্করণ সহ একটি এনপিএম প্রকল্প তৈরি করেছি: github.com/slorber/backspace-disabler (এটি কনটেন্টেটেবলসকে সমর্থন করে এবং এর কোনও নির্ভরতাও নেই)
সেবাস্তিয়ান লরবার

62

এই কোডটি সমস্ত ব্রাউজারগুলিতে কাজ করে এবং কোনও ফর্ম উপাদানটিতে না থাকলে বা ফর্ম উপাদানটি অক্ষম থাকলে | কেবল পঠনযোগ্য bac এটি দক্ষও রয়েছে, এটি টাইপযুক্ত প্রতিটি কীতে চালিত হওয়ার সময় গুরুত্বপূর্ণ।

$(function(){
    /*
     * this swallows backspace keys on any non-input element.
     * stops backspace -> back
     */
    var rx = /INPUT|SELECT|TEXTAREA/i;

    $(document).bind("keydown keypress", function(e){
        if( e.which == 8 ){ // 8 == backspace
            if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){
                e.preventDefault();
            }
        }
    });
});

1
দয়া করে আমার উদাহরণটি পরীক্ষা করুন, আপনি সেই অনুযায়ী আপনার কোড আপডেট করতে চাইতে পারেন।
বিফ ম্যাগগ্রিফ

10
আমি এটি @ এরিককলেনের সমাধানের চেয়ে বেশি পছন্দ করি কারণ এটি পরিষ্কার। যাইহোক, আমি বাটনগুলি, রেডিও বোতামগুলি এবং চেক বাক্সগুলিকেও উপেক্ষা করার জন্য জমা দিতে চেয়েছিলাম, তাই আমি যদি এই () পরিবর্তন করে থাকি:if(!rx.test(e.target.tagName) || $(e.target).is(':checkbox') || $(e.target).is(':radio') || $(e.target).is(':submit') || e.target.disabled || e.target.readOnly )
ম্যাথিউ ক্লার্ক

@ থিয়েলম্যান, এরিকালেনের উত্তর সম্পর্কে আমার মন্তব্য দেখুন। এটির জন্যও অ্যাকাউন্ট করা উচিত contentEditable
ধাক্কা

10
@ মাফুকক্লোক: আপনি আরও সংক্ষিপ্ত হতে পারেন.is(':checkbox,:radio,:submit')
সিডিএমকে

1
@ সিডিএমকেয়ে: আমি বিশ্বাস করতে পারি না যে আমি এটি প্রথম স্থানে লিখিনি। আমাদের সকলের জন্য এটি পরিষ্কার করার জন্য ধন্যবাদ :)
ম্যাথু ক্লার্ক

41

এখানে অন্যান্য উত্তরগুলি প্রতিষ্ঠিত করেছে যে শ্বেত তালিকা ছাড়াই ব্যাকস্পেসের অনুমতি দেওয়া ছাড়া এটি করা যায় না। এই সমাধানটি আদর্শ নয় কারণ শ্বেতলিস্ট কেবল টেক্সারিয়াস এবং পাঠ্য / পাসওয়ার্ড ইনপুটগুলির মতো সোজা নয়, তবে এটি বারবার অসম্পূর্ণ এবং আপডেট হওয়া প্রয়োজন বলে মনে হয়।

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

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

সাধারণীকৃত সমাধানের জন্য ট্রেডঅফসের আদর্শ সমন্বয়টি নিম্নরূপ: ব্যাকস্পেসটি চাপছে কিনা তা ট্র্যাক করুন এবং এটি যদি রয়েছে তবে অনবরেডনলোড মোডালটি পপ আপ করুন। অন্য কথায়:

function confirmBackspaceNavigations () {
    // http://stackoverflow.com/a/22949859/2407309
    var backspaceIsPressed = false
    $(document).keydown(function(event){
        if (event.which == 8) {
            backspaceIsPressed = true
        }
    })
    $(document).keyup(function(event){
        if (event.which == 8) {
            backspaceIsPressed = false
        }
    })
    $(window).on('beforeunload', function(){
        if (backspaceIsPressed) {
            backspaceIsPressed = false
            return "Are you sure you want to leave this page?"
        }
    })
} // confirmBackspaceNavigations

এটি আই 7 +, ফায়ারফক্স, ক্রোম, সাফারি এবং অপেরাতে কাজ করার জন্য পরীক্ষা করা হয়েছে। এই ফাংশনটি কেবল আপনার Global.js এ ফেলে দিন এবং এমন কোনও পৃষ্ঠা থেকে কল করুন যেখানে আপনি চান না যে ব্যবহারকারীরা ভুলক্রমে তাদের ডেটা হারাতে চান।

মনে রাখবেন যে একটি অনবিতুনলোডলোড মডেল কেবল একবার ট্রিগার করা যেতে পারে, তাই যদি ব্যবহারকারী আবার ব্যাকস্পেস টিপায় তবে মোডালটি আর জ্বালাবে না।

নোট করুন যে এটি হ্যাশচেঞ্জের ইভেন্টগুলিতে ট্রিগার করবে না, তবে সেই প্রসঙ্গে আপনি অন্য কৌশলগুলি ব্যবহারকারীদের দুর্ঘটনাক্রমে তাদের ডেটা হারানো থেকে রক্ষা করতে পারেন।


2
আমি কেবল এই একই সমাধানটি যুক্ত করতে গিয়েছিলাম এবং LOL পৃষ্ঠার নীচে এই পোস্টটি দেখেছি। আমার মধ্যে একটি পার্থক্য হ'ল শেষ ইউজারআইনপুটবাসস্যাক্স স্পেস = রিটার্নের আগে মিথ্যা সেট করা "আপনি কি নিশ্চিত ..." স্টেটমেন্টটি আগেই পপআপটি দেখার পরে যদি আপনি ব্যাক বোতামটি ক্লিক করেন তবে আপনি পপআপটি পাবেন না (সুতরাং এটি অ- ব্যাকস্পেস-প্রভাবিত আচরণ)।
ডেভিড রাসেল

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

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

1
@ স্টিভ, বিরল বা না, যদি ফাংশনে কোনও সমস্যা হয় তবে তথ্যটি এখানে। সত্যিই কোনও সমস্যা আছে কিনা তা আমি জানতে চাই।
ভ্লাদিমির কর্নিয়া

1
দুর্দান্ত সমাধান, তবে দুর্ভাগ্যক্রমে, কোনও ব্যবহারকারী যদি দুর্ঘটনাক্রমে দু'বার ব্যাকস্পেস টিপেন, তা এখনও পিছনে নেভিগেট করে। (কমপক্ষে ফায়ারফক্সে)
রিমকো ডি জ্বর্ট

26

আরও মার্জিত / সংক্ষিপ্ত সমাধান:

$(document).on('keydown',function(e){
  var $target = $(e.target||e.srcElement);
  if(e.keyCode == 8 && !$target.is('input,[contenteditable="true"],textarea'))
  {
    e.preventDefault();
  }
})

1
এটি অনেক বেশি সংক্ষিপ্ত এবং আমি যা বলতে পারি তা থেকে কাজ করে। সর্বাধিক জনপ্রিয় উত্তরে এমন সমস্ত ইনপুট পরীক্ষা করা কেন এবং আরও জটিল বলে মনে হচ্ছে? এটি আরও নির্ভরযোগ্য?
কাছাকাছি

1
সর্বাধিক জনপ্রিয় উত্তরটি প্রথম প্রশ্নের উত্তরটি দেওয়া হয়েছিল, এইভাবে উচ্চ ভোট।
ডারওয়েইন

4
যখন কেবলমাত্র পাঠ্য ক্ষেত্রগুলি ফোকাস করা হয় মুছে ফেলা এখনও ক্রোমে ফিরে যায়
উইল ডি

16

বিভিন্ন ইনপুট ধরণের সম্বোধন করার জন্য এরিক্কলেনের উত্তরটির পরিবর্তন

আমি খুঁজে পেয়েছি যে কোনও উদ্যোগী ব্যবহারকারী চেকবক্স বা রেডিও বোতামে এটি সাফ করার ব্যর্থ চেষ্টাতে ব্যাকস্পেস টিপতে পারে এবং পরিবর্তে তারা পিছনে নেভিগেট করবে এবং তাদের সমস্ত ডেটা হারাবে।

এই পরিবর্তনটি সেই সমস্যাটিকে সম্বোধন করবে।

বিষয়বস্তু সম্পাদনাযোগ্য ডিভগুলি সম্বোধন করতে নতুন সম্পাদনা

    //Prevents backspace except in the case of textareas and text inputs to prevent user navigation.
    $(document).keydown(function (e) {
        var preventKeyPress;
        if (e.keyCode == 8) {
            var d = e.srcElement || e.target;
            switch (d.tagName.toUpperCase()) {
                case 'TEXTAREA':
                    preventKeyPress = d.readOnly || d.disabled;
                    break;
                case 'INPUT':
                    preventKeyPress = d.readOnly || d.disabled ||
                        (d.attributes["type"] && $.inArray(d.attributes["type"].value.toLowerCase(), ["radio", "checkbox", "submit", "button"]) >= 0);
                    break;
                case 'DIV':
                    preventKeyPress = d.readOnly || d.disabled || !(d.attributes["contentEditable"] && d.attributes["contentEditable"].value == "true");
                    break;
                default:
                    preventKeyPress = true;
                    break;
            }
        }
        else
            preventKeyPress = false;

        if (preventKeyPress)
            e.preventDefault();
    });

উদাহরণ
2 টি ফাইল বানানোর পরীক্ষা করা।

starthere.htm - প্রথমে এটি খুলুন যাতে আপনার কাছে ফিরে যাওয়ার জায়গা থাকে

<a href="./test.htm">Navigate to here to test</a>

test.htm - চেকবক্স বা জমা ফোকাস করার সময় ব্যাকস্পেস টিপলে পিছনের দিকে নেভিগেট হবে (ট্যাবিং দ্বারা অর্জন)। আমার কোডটি ঠিক করার জন্য প্রতিস্থাপন করুন।

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

    $(document).keydown(function(e) {
        var doPrevent;
        if (e.keyCode == 8) {
            var d = e.srcElement || e.target;
            if (d.tagName.toUpperCase() == 'INPUT' || d.tagName.toUpperCase() == 'TEXTAREA') {
                doPrevent = d.readOnly || d.disabled;
            }
            else
                doPrevent = true;
        }
        else
            doPrevent = false;

        if (doPrevent)
            e.preventDefault();
    });
</script>
</head>
<body>
<input type="text" />
<input type="radio" />
<input type="checkbox" />
<input type="submit" />
</body>
</html>

আপনি রেডিও | চেকবক্স | জমা -> পিছনে ফাংশনটিতে ব্যাকস্পেস প্রেসটি কোন ব্রাউজারটি দেখেছেন? আমি কোনও ব্রাউজারকে এটি করতে দেখিনি ..
থিওলম্যান

ইন্টারনেট এক্সপ্লোরার 8 এবং ক্রোম
বিফ ম্যাগগ্রিফ

2
আমি এই থ্রেডে আরও অনেকগুলি সমাধানের চেষ্টা করেছি, তবে এটি আমার সমস্ত পরিস্থিতিতে ভাল কাজ করেছে এবং কোডটি বোঝার জন্য সবচেয়ে পরিষ্কার, সহজতম। ধন্যবাদ.
এজওয়ার্ড

আপনি কি ডারওয়েইনের চেষ্টা করেছেন আমি জানতে আগ্রহী যে কেন এটি এত সংক্ষিপ্ত এবং এটি আরও জটিল, তবে উভয়ই আমার পক্ষে একই কাজ করছে বলে মনে হচ্ছে
নিকটস্থ

এই লিঙ্কে কাজ করে? আইটেমটি সরাতে আমার কাছে একটি এএসপি. নেট অ্যাপ্লিকেশন রয়েছে। এটি এখন পর্যন্ত এটিই কাজ করেনি ...
স্টিভ

8

মন্তব্যগুলির উপর ভিত্তি করে এটি প্রদর্শিত হয় আপনি ফর্মগুলিতে লোকজনকে হারাতে বাধা দিতে চান, যদি তারা মুছে ফেলার জন্য ব্যাকস্পেস টিপেন তবে ক্ষেত্রটি মনোযোগী নয়।

কোন ক্ষেত্রে, আপনি অননলোড ইভেন্ট হ্যান্ডলারটি দেখতে চান। স্ট্যাক ওভারফ্লো এটি ব্যবহার করে - আপনি উত্তর লিখতে শুরু করার পরে যদি কোনও পৃষ্ঠা ছেড়ে যাওয়ার চেষ্টা করেন, তবে এটি একটি সতর্কতা পপ আপ করবে।


4
দুঃখিত যে একটি অভদ্র মন্তব্য ছিল। আমার অর্থ হ'ল ব্যবহারকারী সম্ভবত এমন কিছু করার জন্য বারণ করতে চান না যা তারা জানতেন না যে ভুল ছিল। কেন নীরবে চুপটি করে অনকিডাউন দিয়ে খাবেন না? লক্ষ্যটি হ'ল ব্যবহারকারীকে পৃষ্ঠাটি ছেড়ে যাওয়া থেকে পুরোপুরি প্রতিরোধ করা নয়, তবে এই সাধারণ ভুল থেকে রক্ষা করা। এছাড়াও, পপআপ সংলাপগুলি খুব কার্যকর বা কার্যকর হয় না effective ব্যবহারকারীরা সেগুলি পড়েন না। আপনি কি পৃষ্ঠাটি ছেড়ে যাওয়ার বিষয়ে নিশ্চিত? ঠিক আছে! অপেক্ষার অপেক্ষা নেই, আমি পৃষ্ঠাটি ছাড়তে চাইনি .. উফ খুব দেরী।
ব্রেটন

3
ঠিক আছে তবে এটি নিন বা এটি ছেড়ে দিন। আমি মনে করি আপনি এমন একটি সমস্যা যা প্রকৃতপক্ষে বিদ্যমান নয়, বা কমপক্ষে এটি গুরুত্বপূর্ণ নয় over এবং আমার অভিজ্ঞতা হিসাবে, এটি কেবল শক্তি ব্যবহারকারী যারা সঠিকভাবে না পড়ে অচেনা কথোপকথনে "ওকে" ক্লিক করেন। ;)
অসন্তুষ্ট গোয়াট

3
আপনি এবং ব্রেটান একই ব্যক্তি? যাই হোক আপনি ধরণ সেখানে পায়ে নিজেকে গুলি করে হত্যা - নিবন্ধ বলছে তাই যখন পৃষ্ঠা রেখে সম্পর্কে ডায়ালগ দেখে তারা প্রেস করতে যাচ্ছেন "বাতিল" এবং সেইজন্য "ডিফল্ট উত্তর বাতিল হল" না পৃষ্ঠাটি ছেড়ে। যদিও এটি লক্ষ করা উচিত যে সেই কথোপকথনে Chrome এর বিকল্পগুলি "এই পৃষ্ঠাটি ছেড়ে দিন" এবং "এই পৃষ্ঠায় থাকুন" যা খুব স্পষ্ট।
অসন্তুষ্ট গোয়াট

1
না, তিনি আমি নন, তবে আমি আগে এই লিঙ্কটি পেরিয়ে এসেছি। আমি মন্তব্যগুলি হাসিখুশি মনে হয়। "কী !? মানুষ মোডাল ডায়লগ বাক্সগুলিকে উপেক্ষা করে? আমাদের এগুলি আরও স্থির এবং বিরক্তিকর করার জন্য আমাদের অবশ্যই একটি উপায় খুঁজে বের করতে হবে!"! সত্যিই মাইক্রোসফ্ট সফ্টওয়্যার সম্পর্কে অনেক কিছু ব্যাখ্যা করে।
ব্রেটন 3

3
@ অসন্তুষ্ট: না, আমি ব্রেটন নই, এবং নিবন্ধটির মূল বিষয়টি "ডিফল্ট পছন্দটি হ'ল ..." তবে "ব্যবহারকারীরা কিছুই পড়েন না।"
এরিক্ক্যালেন

7

এই কোডটি কাজ করে নেভিগেট করা বন্ধ করুন!

$(document).on("keydown", function (event) {        
   if (event.keyCode === 8) {
      event.preventDefault();
    }
  });

তবে পাঠ্য ক্ষেত্রগুলি সীমাবদ্ধ না রাখার জন্য অন্যকে

$(document).on("keydown", function (event) {
  if (event.which === 8 && !$(event.target).is("input, textarea")) {
   event.preventDefault();
  }
});

নির্দিষ্ট ক্ষেত্রের জন্য এটিকে রোধ করতে কেবল ব্যবহার করুন

$('#myOtherField').on("keydown", function (event) {
  if (event.keyCode === 8 || event.which === 8) { 
   event.preventDefault(); 
  } 
});

নীচে এটি উল্লেখ করে!

জ্যাকুয়ারি (গুগলের হোমপৃষ্ঠার মতো) দিয়ে নেভিগেট করা থেকে ব্যাকস্পেসকে আটকাও


7

বেশিরভাগ উত্তর jquery হয়। আপনি খাঁটি জাভাস্ক্রিপ্টে পুরোপুরি এটি করতে পারেন, সহজ এবং কোনও লাইব্রেরির প্রয়োজন নেই। এই নিবন্ধটি আমার পক্ষে একটি ভাল সূচনার পয়েন্ট ছিল তবে কীআইডিটিফায়ারটি হ্রাস করা হয়েছে, তাই আমি চাইছিলাম এই কোডটি আরও সুরক্ষিত হোক তাই আমি যদি ইফ স্টেটমেন্টে || e.keyCode == 8 যুক্ত করেছি । এছাড়াও, কোডটি ফায়ারফক্সে খুব ভাল কাজ করছে না তাই আমি ফিরতি মিথ্যা যুক্ত করেছি; এবং এখন এটি পুরোপুরি ভাল কাজ করে। এটা এখানে:

<script type="text/javascript">
window.addEventListener('keydown',function(e){if(e.keyIdentifier=='U+0008'||e.keyIdentifier=='Backspace'||e.keyCode==8){if(e.target==document.body){e.preventDefault();return false;}}},true);
</script>

এই কোডটি দুর্দান্ত কাজ করে কারণ,

  1. এটি খাঁটি জাভাস্ক্রিপ্টে রয়েছে (কোনও লাইব্রেরির প্রয়োজন নেই)।
  2. এটি কেবল চাপানো কীটি পরীক্ষা করে না, ক্রিয়াটি সত্যই একটি ব্রাউজার "ব্যাক" ক্রিয়া কিনা তা নিশ্চিত করে।
  3. উপরের সাথে একসাথে, ব্যবহারকারীরা ব্যাক বোতামের ক্রিয়াটি আটকাতে গিয়ে কোনও সমস্যা ছাড়াই ওয়েব পৃষ্ঠায় ইনপুট পাঠ্য বাক্সগুলি থেকে পাঠ্য টাইপ বা মুছতে পারে।
  4. এটি সংক্ষিপ্ত, পরিষ্কার, দ্রুত এবং সরাসরি বিন্দুতে।

আপনি কনসোল.লগ যুক্ত করতে পারেন (ই); আপনার পরীক্ষার উদ্দেশ্যে, এবং ক্রোমে F12 চাপুন, "কনসোল" ট্যাবে যান এবং পৃষ্ঠায় "ব্যাকস্পেস" টিপুন এবং কোন মানগুলি ফিরে এসেছে তা দেখতে তার ভিতরে এটি দেখুন, তারপরে আপনি কোডটি আরও বাড়ানোর জন্য সেই সমস্ত পরামিতিগুলিকে লক্ষ্য করতে পারেন আপনার প্রয়োজন অনুসারে উপরের।


6

"থিওলম্যান" ও & বিফ ম্যাগগ্রিফ দ্বারা প্রদত্ত সমাধানগুলির সংমিশ্রণ

নিম্নলিখিত কোডটি আইই 8 / মজিলা / ক্রোমে সঠিকভাবে কাজ করছে বলে মনে হচ্ছে

$(function () {
    var rx = /INPUT|TEXTAREA/i;
    var rxT = /RADIO|CHECKBOX|SUBMIT/i;

    $(document).bind("keydown keypress", function (e) {
        var preventKeyPress;
        if (e.keyCode == 8) {
            var d = e.srcElement || e.target;
            if (rx.test(e.target.tagName)) {
                var preventPressBasedOnType = false;
                if (d.attributes["type"]) {
                    preventPressBasedOnType = rxT.test(d.attributes["type"].value);
                }
                preventKeyPress = d.readOnly || d.disabled || preventPressBasedOnType;
            } else {preventKeyPress = true;}
        } else { preventKeyPress = false; }

        if (preventKeyPress) e.preventDefault();
    });
}); 

IMAGE যুক্ত করাও কার্যকর হতে পারে।
এমআসওয়াডেজ

আমি এই এক স্থির।
কোরেন্টিন

5

নিশ্চিত নয় কেন কেন কেউ এই উত্তর দিয়েছে - এটি সম্ভব কিনা তা জিজ্ঞাসা করার জন্য একেবারে যুক্তিসঙ্গত প্রযুক্তিগত প্রশ্নের মতো মনে হচ্ছে।

না, ব্যাকস্পেস বোতামটি অক্ষম করার জন্য ক্রস ব্রাউজারের কোনও উপায় আছে বলে আমি মনে করি না। আমি জানি এটি আজকাল এফএফ এ ডিফল্টরূপে সক্ষম হয় নি।


3
মাইনাস 1 আসল প্রশ্নের উত্তর না দেওয়ার জন্য এবং সময় নষ্ট করার জন্য
অ্যান্ড্রু

3

এই সমাধানটি পোস্ট করা অন্যদের মতোই, তবে এটি একটি সহজ শ্বেত তালিকা ব্যবহার করে সহজেই .is () ফাংশনে নির্বাচককে সেট করে নির্দিষ্ট উপাদানগুলিতে ব্যাকস্পেসের অনুমতি দিতে এটি সহজেই অনুকূলিতকরণযোগ্য করে তোলে।

পৃষ্ঠাগুলিতে ব্যাকস্পেসটি আবার নেভিগেট করা থেকে রোধ করতে আমি এই ফর্মটিতে এটি ব্যবহার করি:

$(document).on("keydown", function (e) {
    if (e.which === 8 && !$(e.target).is("input:not([readonly]), textarea")) {
        e.preventDefault();
    }
});

2
যখন ব্যবহারকারী সন্তোষজনক ব্যবহার করে, এটি এটি অক্ষম করে। সুতরাং আপনি হোয়াইটলিস্টে সন্তুষ্ট = সত্য যোগ করতে চাইতে পারেন
মিগুয়েল

3

@ এরিককলনের দুর্দান্ত উত্তরে কিছুটা বিশদভাবে জানাতে , এখানে এমন একটি ফাংশন রয়েছে যা এইচটিএমএল 5-এ প্রবর্তিত সমস্ত কীবোর্ড ভিত্তিক ইনপুট প্রকারকে মঞ্জুরি দেয় :

$(document).unbind('keydown').bind('keydown', function (event) {
    var doPrevent = false;
    var INPUTTYPES = [
        "text", "password", "file", "date", "datetime", "datetime-local",
        "month", "week", "time", "email", "number", "range", "search", "tel",
        "url"];
    var TEXTRE = new RegExp("^" + INPUTTYPES.join("|") + "$", "i");
    if (event.keyCode === 8) {
        var d = event.srcElement || event.target;
        if ((d.tagName.toUpperCase() === 'INPUT' && d.type.match(TEXTRE)) ||
             d.tagName.toUpperCase() === 'TEXTAREA') {
            doPrevent = d.readOnly || d.disabled;
        } else {
            doPrevent = true;
        }
    }
    if (doPrevent) {
        event.preventDefault();
    }
});

ধন্যবাদ, আমি এই উত্তরটি ব্যবহার করছি! আপনি এখনও পর্যন্ত এই সমাধানগুলির সাথে কোনও সমস্যা পেয়েছেন?
কাছাকাছি

1
আমি ইনপুটটাইপস, টেক্সট্রে ঘোষণাগুলি ফাংশন থেকে সরিয়ে নিয়ে যাওয়ার পরামর্শ দিচ্ছি যাতে তারা প্রতিটি কীডাউন ইভেন্টে পুনরায় গণনা না করে।
thetoolman

3

জাভাস্ক্রিপ্ট - jQuery উপায়:

$(document).on("keydown", function (e) {
    if (e.which === 8 && !$(e.target).is("input, textarea")) {
        e.preventDefault();
    }
});

জাভাস্ক্রিপ্ট - স্থানীয় উপায়, যা আমার পক্ষে কাজ করে:

<script type="text/javascript">

//on backspace down + optional callback
function onBackspace(e, callback){
    var key;
    if(typeof e.keyIdentifier !== "undefined"){
        key = e.keyIdentifier;

    }else if(typeof e.keyCode !== "undefined"){
        key = e.keyCode;
    }
    if (key === 'U+0008' || 
        key === 'Backspace' || 
        key === 8) {
                    if(typeof callback === "function"){
                callback();
            }
            return true;
        }
    return false;
}

//event listener
window.addEventListener('keydown', function (e) {

    switch(e.target.tagName.toLowerCase()){
        case "input":
        case "textarea":
        break;
        case "body":
            onBackspace(e,function(){
                e.preventDefault();
            });

        break;
    }
}, true);
</script>

@ মিশেলপোটার এটি আমার ব্যবহারের ক্ষেত্রে অনেক আগে থেকেই ঠিক ছিল। দয়া করে আমার উত্তরকে উন্নত / পরিবর্তন করে অবদান রাখতে দ্বিধা বোধ করবেন। ধন্যবাদ!
ভ্লাদিমির জুরিকিক

3

একটি জা-জাকিউরির উত্তর খুঁজে পেতে আমার বেশ কষ্ট হয়েছিল। আমাকে ট্র্যাকে রাখার জন্য স্টাসকে ধন্যবাদ।

ক্রোম: যদি ক্রস ব্রাউজার সমর্থন না লাগে তবে আপনি শ্বেত তালিকাভুক্ত না হয়ে কেবল একটি কালো তালিকা ব্যবহার করতে পারেন। এই খাঁটি জেএস সংস্করণটি ক্রোমে কাজ করে তবে আইই তে নয়। এফএফ সম্পর্কে নিশ্চিত নয়।

ক্রোমে (। 36, মাঝামাঝি ২০১৪), ইনপুট বা বিতর্কিত উপাদানগুলিতে নেই এমন কী টিপুনগুলি লক্ষ্যবস্তু বলে মনে হচ্ছে <BODY>। এটি একটি ব্ল্যাকলিস্ট ব্যবহার করা সম্ভব করে, যা আমি শ্বেত তালিকাতে পছন্দ করি। আইই সর্বশেষ ক্লিক টার্গেট ব্যবহার করে - তাই এটি ডিভিড বা অন্য কিছু হতে পারে। এটি আইই এ অকেজো করে তোলে।

window.onkeydown = function(event) {
    if (event.keyCode == 8) {
    //alert(event.target.tagName); //if you want to see how chrome handles keypresses not on an editable element
        if (event.target.tagName == 'BODY') {
            //alert("Prevented Navigation");
            event.preventDefault();
        }
    }
}  

ক্রস ব্রাউজার: খাঁটি জাভাস্ক্রিপ্টের জন্য, আমি স্টাসের উত্তরটি সেরা বলে খুঁজে পেয়েছি। সন্তুষ্টিকর জন্য আরও একটি শর্ত চেক যুক্ত করা এটি আমার পক্ষে কাজ করে তোলে *:

document.onkeydown = function(e) {stopDefaultBackspaceBehaviour(e);}
document.onkeypress = function(e) {stopDefaultBackspaceBehaviour(e);}

function stopDefaultBackspaceBehaviour(event) {
    var event = event || window.event;
    if (event.keyCode == 8) {
        var elements = "HTML, BODY, TABLE, TBODY, TR, TD, DIV";
        var d = event.srcElement || event.target;
        var regex = new RegExp(d.tagName.toUpperCase());
        if (d.contentEditable != 'true') { //it's not REALLY true, checking the boolean value (!== true) always passes, so we can use != 'true' rather than !== true/
            if (regex.test(elements)) {
                event.preventDefault ? event.preventDefault() : event.returnValue = false;
            }
        }
    }
}

* মনে রাখবেন যে আইইগুলি [সম্পাদনা করুন: এবং স্পার্টান / টেকপ্রিভিউ] এর একটি "বৈশিষ্ট্য" রয়েছে যা টেবিল-সম্পর্কিত উপাদানগুলি অযোগ্য করে তোলে । আপনি যদি এর মধ্যে একটিতে ক্লিক করেন এবং তারপরে ব্যাকস্পেস টিপুন, এটি আবার নেভিগেট করবে। আপনার যদি সম্পাদনাযোগ্য <td>গুলি না থাকে তবে এটি কোনও সমস্যা নয়।


2

গ্রহণযোগ্য সমাধান এবং সিলেক্ট 2.জেএস প্লাগইন নিয়ে আমার কিছু সমস্যা ছিল; মোছার ক্রিয়াটি প্রতিরোধ করা হওয়ায় আমি সম্পাদনাযোগ্য বাক্সে অক্ষরগুলি মুছতে সক্ষম হয়েছি। এটি আমার সমাধান ছিল:

//Prevent backwards navigation when trying to delete disabled text.
$(document).unbind('keydown').bind('keydown', function (event) {

    if (event.keyCode === 8) {

        var doPrevent = false,
            d = event.srcElement || event.target,
            tagName = d.tagName.toUpperCase(),
            type = (d.type ? d.type.toUpperCase() : ""),
            isEditable = d.contentEditable,
            isReadOnly = d.readOnly,
            isDisabled = d.disabled;

        if (( tagName === 'INPUT' && (type === 'TEXT' || type === 'PASSWORD'))
            || tagName === 'PASSWORD'
            || tagName === 'TEXTAREA') {
            doPrevent =  isReadOnly || isDisabled;
        }
        else if(tagName === 'SPAN'){
            doPrevent = !isEditable;
        }
        else {
            doPrevent = true;
        }
    }

    if (doPrevent) {
        event.preventDefault();
    }
});

সিলেক্ট 2 "কন্টেন্টএডেটেবল" এর একটি বৈশিষ্ট্যযুক্ত একটি স্প্যান তৈরি করে যা এতে সম্পাদনযোগ্য কম্বো বাক্সের জন্য সত্য হিসাবে সেট করা থাকে। আমি স্প্যানগুলির ট্যাগনাম এবং বিভিন্ন বৈশিষ্ট্যের জন্য অ্যাকাউন্টে কোড যুক্ত করেছি। এটি আমার সমস্ত সমস্যার সমাধান করেছে।

সম্পাদনা করুন: আপনি jquery এর জন্য যদি সিলেক্ট 2 কম্বোবক্স প্লাগইন ব্যবহার না করেন তবে এই সমাধানটি আপনার প্রয়োজন হতে পারে না এবং গ্রহণযোগ্য সমাধানটি আরও ভাল হতে পারে।


1
    document.onkeydown = function (e) {    
        e.stopPropagation();
        if ((e.keyCode==8  ||  e.keyCode==13) &&
            (e.target.tagName != "TEXTAREA") && 
            (e.target.tagName != "INPUT")) { 
            return false;
        }
    };

2
আপনার রিটার্ন মিথ্যা ব্যবহার করা উচিত নয়। e.preventDefault বাঞ্ছনীয়। এছাড়াও আপনি কেবল ব্যাকস্পেস নয়, প্রতিটি কী জন্য ইভেন্টটির প্রচার বন্ধ করছেন। শেষ অবধি, কী কোড 13 টি প্রবেশ করছে এবং ব্যাকস্পেসের সাহায্যে ব্যাক নেভিগেশন আটকাতে হবে তবে এটি ফর্মটি জমা দেওয়া বা অন্যান্য ক্রিয়াকলাপগুলি সম্পাদন করা থেকে বিরত হবে।
কোনটি

1

এই কোডটি সমস্ত ব্রাউজারে সমস্যার সমাধান করে:

onKeydown:function(e)
{
    if (e.keyCode == 8) 
    {
      var d = e.srcElement || e.target;
      if (!((d.tagName.toUpperCase() == 'BODY') || (d.tagName.toUpperCase() == 'HTML'))) 
      {
         doPrevent = false;
      }
       else
      {
         doPrevent = true;
      }
    }
    else
    {
       doPrevent = false;
    }
      if (doPrevent)
      {
         e.preventDefault();
       }

  }

1
D.tagname থাকার কারণে DIVবা এই কোডটি প্রত্যাশার মতো কাজ করে না বলে মনে করি TD
বিফ ম্যাগগ্রিফ

হাসিব আখতারের কোডটি ক্রোম এবং ফায়ারফক্সে নিখুঁতভাবে কাজ করে তবে অবাক করে দেয় !! আইই 6-9 এ নেই কোনও পরামর্শ?
মার্টিন অ্যান্ডারসন

1

ব্যাকস্পেস টিপে নেভিগেশন রোধ করার সহজ উপায়

$(document).keydown(function () {
    if (event.keyCode == 8) {
        if (event.target.nodeName == 'BODY') {
            event.preventDefault();
        }
    }
});

ব্যাকস্পেকে টিপতে নেভিগেশন রোধ করে এবং একই সাথে সমস্ত ইনপুট নিয়ন্ত্রণগুলিতে ব্যাকস্পেসের অনুমতি দেয়
মোহাম্মদ ইরফান মায়ান

এবং প্রথম লাইনটি মিস করবেন না $ (দস্তাবেজ) .কাউন ডাউন (ফাংশন () {
মোহাম্মদ ইরফান মায়ান

3
এটি টেক্সারিয়াস এবং ইনপুটগুলির অভ্যন্তরে ব্যাকবটনটি অক্ষম করবে
নড্রোগ

1

ডোজো টুলকিট ১.7 ব্যবহার করে, এটি আইই 8 তে কাজ করে:

require(["dojo/on", "dojo/keys", "dojo/domReady!"],
function(on, keys) {
    on(document.body,"keydown",function(evt){if(evt.keyCode == keys.BACKSPACE)evt.preventDefault()});
});

1

আপনি কি কেবলমাত্র পাঠ্য ক্ষেত্রের মধ্যে নিম্নলিখিত বৈশিষ্ট্যগুলি যুক্ত করার খুব সাধারণ সমাধানটি চেষ্টা করেছেন:

অনকিডাউন = "রিটার্ন মিথ্যা;"

ব্যাকস্পেস কীটি কেবল পঠনযোগ্য পাঠ্য ক্ষেত্রে চাপলে এটি ব্রাউজারটিকে ইতিহাসে ফিরে যেতে বাধা দেয়। হতে পারে আমি আপনার প্রকৃত অভিব্যক্তিটি মিস করছি, তবে মনে হচ্ছে এটিই আপনার সমস্যার সহজ সমাধান হতে পারে।


1

অনেক পরিষ্কার সমাধান -

$(document).on('keydown', function (e) {
    var key = e == null ? event.keyCode : e.keyCode;
    if(key == 8 && $(document.activeElement.is(':not(:input)')))   //select, textarea
      e.preventDefault();
});

পর্যায়ক্রমে, আপনি কেবল কিনা তা পরীক্ষা করতে পারেন

$(document.activeElement).is('body')

1

খাঁটি জাভাস্ক্রিপ্ট সংস্করণ, যা সমস্ত ব্রাউজারে কাজ করে:

document.onkeydown = function(e) {stopDefaultBackspaceBehaviour(e);}
document.onkeypress = function(e) {stopDefaultBackspaceBehaviour(e);}

function stopDefaultBackspaceBehaviour(event) {
  var event = event || window.event;
  if (event.keyCode == 8) {
    var elements = "HTML, BODY, TABLE, TBODY, TR, TD, DIV";
    var d = event.srcElement || event.target;
    var regex = new RegExp(d.tagName.toUpperCase());
    if (regex.test(elements)) {
      event.preventDefault ? event.preventDefault() : event.returnValue = false;
    }
  }
}

অবশ্যই আপনি "INPUT, TEXTAREA" ব্যবহার করতে পারেন এবং "যদি (! Regex.test (উপাদান))) ব্যবহার করতে পারেন তবে"। প্রথম আমার জন্য ভাল কাজ।


1

কর্মক্ষমতা?

আমি পারফরম্যান্স সম্পর্কে চিন্তিত ছিলাম এবং একটি বেহালতা তৈরি করেছি: http://jsfiddle.net/felvhage/k2rT6/9/ebded/result/

var stresstest = function(e, method, index){...

আমি এই থ্রেডে পাওয়া সবচেয়ে প্রতিশ্রুতিবদ্ধ পদ্ধতিগুলি বিশ্লেষণ করেছি। দেখা যাচ্ছে যে এগুলি সবাই খুব দ্রুত ছিল এবং টাইপ করার সময় সম্ভবত "আলস্যতা" শর্তে কোনও সমস্যা তৈরি করে না। আমি সবচেয়ে ধীরে ধীরে মেথডটি দেখেছিলাম আইই 8-এর 10.000 কলগুলির জন্য প্রায় 125 এমএস। যা স্ট্রোক প্রতি 0.0125ms।

আমি কোডেনিপাল এবং রবিন মাবেন পোস্ট করা পদ্ধতিগুলি দ্রুততম ~ 0.001ms (আইই 8) হিসাবে দেখতে পেয়েছি তবে বিভিন্ন শব্দার্থবিজ্ঞানের বিষয়ে সতর্ক থাকি।

সম্ভবত কেউ এই কোডটির সাথে এই জাতীয় কার্যকারিতা প্রবর্তনের জন্য স্বস্তি বোধ করবেন।


1

পরিবর্তিত এরিককলেন উত্তর:

$(document).unbind('keydown').bind('keydown', function (event) {

    var doPrevent = false, elem;

    if (event.keyCode === 8) {
        elem = event.srcElement || event.target;
        if( $(elem).is(':input') ) {
            doPrevent = elem.readOnly || elem.disabled;
        } else {
            doPrevent = true;
        }
    }

    if (doPrevent) {
        event.preventDefault();
        return false;
    }
});

1
নিখুঁত উত্তর. অন্যদের কাছ থেকে আমি যে সমাধানটি পেয়েছি তা ফায়ারফক্সে কাজ করে নি, তবে এইটি কোনও সমস্যা ছাড়াই তিনটি (ফায়ারফক্স, আই এবং ক্রোম) পুরোপুরি কাজ করেছে। ধন্যবাদ প্রজি
নিখিল দীনেশ

1

পরীক্ষার সময় এই সমাধানটি খুব ভালভাবে কাজ করে।

ইনপুট দিয়ে ট্যাগ না থাকা কিছু ইনপুট ক্ষেত্রগুলি পরিচালনা করতে এবং আমার কাজের জন্য একটি ইনপুট ফর্ম তৈরি করে এমন একটি ওরাকল পিএল / এসকিউএল অ্যাপ্লিকেশনটিতে সংহত করতে আমি কিছু কোড যুক্ত করেছি did

আমার দুই সেন্ট":

 if (typeof window.event != ''undefined'')
    document.onkeydown = function() {
    //////////// IE //////////////
    var src = event.srcElement;
    var tag = src.tagName.toUpperCase();
    if (event.srcElement.tagName.toUpperCase() != "INPUT"
        && event.srcElement.tagName.toUpperCase() != "TEXTAREA"
        || src.readOnly || src.disabled 
        )
        return (event.keyCode != 8);
    if(src.type) {
       var type = ("" + src.type).toUpperCase();
       return type != "CHECKBOX" && type != "RADIO" && type != "BUTTON";
       }
   }
else
   document.onkeypress = function(e) {
   //////////// FireFox 
   var src = e.target;
   var tag = src.tagName.toUpperCase();
   if ( src.nodeName.toUpperCase() != "INPUT" && tag != "TEXTAREA"
      || src.readOnly || src.disabled )
      return (e.keyCode != 8);
    if(src.type) {
      var type = ("" + src.type).toUpperCase();
      return type != "CHECKBOX" && type != "RADIO" && type != "BUTTON";
      }                              
   }

1

আমি বর্তমানে স্বীকৃত (এরিক্ক্যালেন) এর পরিষ্কার সংস্করণ সহ একটি এনপিএম প্রকল্প তৈরি করেছি

https://github.com/slorber/backspace-disabler

এটি মূলত একই নীতিগুলি ব্যবহার করে তবে:

  • নির্ভরতা নেই
  • বিতর্কিত জন্য সমর্থন
  • আরও পঠনযোগ্য / রক্ষণাবেক্ষণযোগ্য কোড বেস
  • এটি আমার সংস্থার উত্পাদনে ব্যবহৃত হবে বলে সমর্থন করা হবে
  • এমআইটি লাইসেন্স

var Backspace = 8;

// See http://stackoverflow.com/questions/12949590/how-to-detach-event-in-ie-6-7-8-9-using-javascript
function addHandler(element, type, handler) {
    if (element.addEventListener) {
        element.addEventListener(type, handler, false);
    } else if (element.attachEvent) {
        element.attachEvent("on" + type, handler);
    } else {
        element["on" + type] = handler;
    }
}
function removeHandler(element, type, handler) {
    if (element.removeEventListener) {
        element.removeEventListener(type, handler, false);
    } else if (element.detachEvent) {
        element.detachEvent("on" + type, handler);
    } else {
        element["on" + type] = null;
    }
}




// Test wether or not the given node is an active contenteditable,
// or is inside an active contenteditable
function isInActiveContentEditable(node) {
    while (node) {
        if ( node.getAttribute && node.getAttribute("contenteditable") === "true" ) {
            return true;
        }
        node = node.parentNode;
    }
    return false;
}



var ValidInputTypes = ['TEXT','PASSWORD','FILE','EMAIL','SEARCH','DATE'];

function isActiveFormItem(node) {
    var tagName = node.tagName.toUpperCase();
    var isInput = ( tagName === "INPUT" && ValidInputTypes.indexOf(node.type.toUpperCase()) >= 0 );
    var isTextarea = ( tagName === "TEXTAREA" );
    if ( isInput || isTextarea ) {
        var isDisabled = node.readOnly || node.disabled;
        return !isDisabled;
    }
    else if ( isInActiveContentEditable(node) ) {
        return true;
    }
    else {
        return false;
    }
}


// See http://stackoverflow.com/questions/1495219/how-can-i-prevent-the-backspace-key-from-navigating-back
function disabler(event) {
    if (event.keyCode === Backspace) {
        var node = event.srcElement || event.target;
        // We don't want to disable the ability to delete content in form inputs and contenteditables
        if ( isActiveFormItem(node) ) {
            // Do nothing
        }
        // But in any other cases we prevent the default behavior that triggers a browser backward navigation
        else {
            event.preventDefault();
        }
    }
}


/**
 * By default the browser issues a back nav when the focus is not on a form input / textarea
 * But users often press back without focus, and they loose all their form data :(
 *
 * Use this if you want the backspace to never trigger a browser back
 */
exports.disable = function(el) {
    addHandler(el || document,"keydown",disabler);
};

/**
 * Reenable the browser backs
 */
exports.enable = function(el) {
    removeHandler(el || document,"keydown",disabler);
};

1

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

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

এটি HTMLTextAreElement এর উদাহরণও পরীক্ষা করে রাখে যেহেতু কারও কাছে তাত্ত্বিকভাবে একটি ওয়েব উপাদান থাকতে পারে যা উত্তরাধিকার সূত্রে প্রাপ্ত।

এটি কন্টেন্টএডেটেবল (অন্যান্য উত্তরের সাথে মিলিত) পরীক্ষা করে না।

https://jsfiddle.net/af2cfjc5/15/

var _INPUTTYPE_WHITELIST = ['text', 'password', 'search', 'email', 'number', 'date'];

function backspaceWouldBeOkay(elem) {
    // returns true if backspace is captured by the element
    var isFrozen = elem.readOnly || elem.disabled;
    if (isFrozen) // a frozen field has no default which would shadow the shitty one
        return false;
    else {
        var tagName = elem.tagName.toLowerCase();
        if (elem instanceof HTMLTextAreaElement) // allow textareas
            return true;
        if (tagName=='input') { // allow only whitelisted input types
            var inputType = elem.type.toLowerCase();
            if (_INPUTTYPE_WHITELIST.includes(inputType))
                return true;
        }   
        return false; // everything else is bad
    }
}

document.body.addEventListener('keydown', ev => {
    if (ev.keyCode==8 && !backspaceWouldBeOkay(ev.target)) {
        //console.log('preventing backspace navigation');
        ev.preventDefault();
    }
}, true); // end of event bubble phase

0

সিটাইপয়েন্ট: জাভাস্ক্রিপ্টের জন্য ফিরে অক্ষম করুন

event.stopPropagation()এবং event.preventDefault()IE তে কিছুই করবেন না। যদিও এটি তৈরি করার জন্য event.keyCode == 11কেবল বলার পরিবর্তে আমাকে রিটার্ন পাঠাতে হয়েছিল (আমি কেবল কিছু বাছাই করেছি) "if not = 8, run the event"event.returnValue = falseকাজ করে।


0

Jquery ব্যবহার করে অন্য একটি পদ্ধতি

    <script type="text/javascript">

    //set this variable according to the need within the page
    var BACKSPACE_NAV_DISABLED = true;

    function fnPreventBackspace(event){if (BACKSPACE_NAV_DISABLED && event.keyCode == 8) {return false;}}
    function fnPreventBackspacePropagation(event){if(BACKSPACE_NAV_DISABLED && event.keyCode == 8){event.stopPropagation();}return true;}

    $(document).ready(function(){ 
        if(BACKSPACE_NAV_DISABLED){
            //for IE use keydown, for Mozilla keypress  
            //as described in scr: http://www.codeproject.com/KB/scripting/PreventDropdownBackSpace.aspx
            $(document).keypress(fnPreventBackspace);
            $(document).keydown(fnPreventBackspace);

            //Allow Backspace is the following controls 
            var jCtrl = null;
            jCtrl = $('input[type="text"]');
            jCtrl.keypress(fnPreventBackspacePropagation);
            jCtrl.keydown(fnPreventBackspacePropagation);

            jCtrl = $('input[type="password"]');
            jCtrl.keypress(fnPreventBackspacePropagation);
            jCtrl.keydown(fnPreventBackspacePropagation);

            jCtrl = $('textarea');
            jCtrl.keypress(fnPreventBackspacePropagation);
            jCtrl.keydown(fnPreventBackspacePropagation);

            //disable backspace for readonly and disabled
            jCtrl = $('input[type="text"][readonly="readonly"]')
            jCtrl.keypress(fnPreventBackspace);
            jCtrl.keydown(fnPreventBackspace);

            jCtrl = $('input[type="text"][disabled="disabled"]')
            jCtrl.keypress(fnPreventBackspace);
            jCtrl.keydown(fnPreventBackspace);
        }
    }); 

    </script>

দয়া করে নোট করুন নিয়ন্ত্রণগুলি (পাঠ্যবক্স) গতিশীলভাবে যুক্ত করা থাকলে এটি কাজ করে না।
কোডনেপাল

0

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

document.onkeypress = Backspace;
function Backspace(event) {
    if (event.keyCode == 8) {
        if (document.activeElement.tagName == "INPUT") {
            return true;
        } else {
            return false;
        }
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.