javascript - jquery নিষ্ক্রিয় ফর্ম লিখুন জমা দিন




forms form-submit (11)

আমি আমার পৃষ্ঠায় নিম্নলিখিত জাভাস্ক্রিপ্ট কাজ করছে বলে মনে হচ্ছে না।

$('form').bind("keypress", function(e) {
  if (e.keyCode == 13) {               
    e.preventDefault();
    return false;
  }
});

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


সব ব্রাউজারের জন্য জাভাস্ক্রিপ্ট মধ্যে সম্পূর্ণ সমাধান

উপরে কোড এবং সমাধান সবচেয়ে নিখুঁত। যাইহোক, আমি মনে করি সর্বাধিক একটি "সংক্ষিপ্ত উত্তর" যা অসম্পূর্ণ।

তাই এখানে পুরো উত্তর। পাশাপাশি IE 7 এর জন্য নেটিভ সাপোর্ট সহ জাভাস্ক্রিপ্টে।

var form = document.getElementById("testForm");
form.addEventListener("submit",function(e){e.preventDefault(); return false;});

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


3 বছর পর এবং একক ব্যক্তি সম্পূর্ণ এই প্রশ্নের উত্তর দিয়েছে না।

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

ফর্মটি অনুমান করা একটি জমা বোতাম আছে, কিনা একটি <button id="save-form"> অথবা একটি <input id="save-form" type="submit"> করুন:

$("#save-form").on("click", function () {
    $.ajax({
        ...
    });
    return false;
});

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

সংক্ষেপে, এখানে কোডটি রয়েছে:

<script type="text/javascript">
window.addEventListener('keydown',function(e){if(e.keyIdentifier=='U+000A'||e.keyIdentifier=='Enter'||e.keyCode==13){if(e.target.nodeName=='INPUT'&&e.target.type=='text'){e.preventDefault();return false;}}},true);
</script>

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


আমি জানি না আপনি যদি ইতিমধ্যেই এই সমস্যার সমাধান করেন, অথবা যে কেউ এই মুহূর্তে এটি সমাধান করার চেষ্টা করছেন তবে এখানে আমার সমাধান!

$j(':input:not(textarea)').keydown(function(event){
    var kc = event.witch || event.keyCode;
    if(kc == 13){
    event.preventDefault();
        $j(this).closest('form').attr('data-oldaction', function(){
            return $(this).attr('action');
        }).attr('action', 'javascript:;');

        alert('some_text_if_you_want');

        $j(this).closest('form').attr('action', function(){
            return $(this).attr('data-oldaction');
        });
        return false;
    }
});

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

var keyCode = e.keyCode || e.which;
if (keyCode === 13 && !$(document.activeElement).is('textarea')) {
  e.preventDefault();
  return false;
}

এমনকি ছোট:

$('myform').submit(function() {
  return false;
});

নিম্নোক্ত কোডটি কোনও ফর্ম জমা দেওয়ার জন্য প্রবেশ কী থেকে প্রবেশ করাকে অস্বীকার করবে, তবে এটি আপনাকে টেক্সটেয়ারে এন্টার কী ব্যবহার করার অনুমতি দেবে। আপনি আপনার প্রয়োজনের উপর নির্ভর করে আরও এটি সম্পাদনা করতে পারেন।

<script type="text/javascript">
        function stopRKey(evt) {
          var evt = (evt) ? evt : ((event) ? event : null);
          var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
          if ((evt.keyCode == 13) && ((node.type=="text") || (node.type=="radio") || (node.type=="checkbox")) )  {return false;}
        }

        document.onkeypress = stopRKey;
</script> 

ফায়ারফক্সে, যখন আপনি ইনপুট এবং এন্টার চাপুন, এটি এটির উপরের ফর্মটি জমা দেবে। সমাধান জমা দিতে হবে ফর্ম যোগ করুন:

<input type="submit" onclick="return false;" style="display:none" />

যদি keyCode ধরা না পড়ে তবে which ধরুন:

$('#formid').on('keyup keypress', function(e) {
  var keyCode = e.keyCode || e.which;
  if (keyCode === 13) { 
    e.preventDefault();
    return false;
  }
});

সম্পাদনা করুন: এটি মিস করা হয়েছে, এটি keyup পরিবর্তে keyup ব্যবহার করা ভাল

সম্পাদন 2: ফায়ারফক্সের কিছু নতুন সংস্করণের মতো ফর্ম জমা দেওয়া প্রতিরোধ করা হয় না, এটি কীপ্রেস ইভেন্টটি ফর্মটিতে যোগ করা আরও নিরাপদ। এছাড়াও এটি কোনও কাজটি (এখন আর?) ফর্মটিকে "নাম" ফর্মটি কেবলমাত্র ফর্মের সাথে যুক্ত করে কেবলমাত্র ফর্ম আইডি দ্বারা কাজ করে না। তাই আমি যথাযথভাবে কোড উদাহরণ পরিবর্তন করে এই আরো সুস্পষ্ট তৈরি।

সম্পাদনা 3: পরিবর্তিত bind() থেকে on()


যদি আপনি কেবল এন্টারে জমা দিতে চান এবং বোতাম জমা দিতে চান তবে ফর্মটির অন-জমা ইভেন্টটিও ব্যবহার করুন

<form onsubmit="return false;">

আপনি JS ফাংশনে কল দিয়ে "ফিরতি মিথ্যা" প্রতিস্থাপন করতে পারেন যা প্রয়োজনীয় কিছু করবে এবং শেষ ধাপ হিসাবে ফর্মটি জমা দেবে।


$('form').keyup(function(e) {
  return e.which !== 13  
});

Event.which সম্পত্তি event.keyCode এবং event.charCode normalizes। এটি ইভেন্ট দেখার জন্য বাঞ্ছনীয়। কীবোর্ড কী ইনপুট জন্য।

which ডক্স।





form-submit