জাভাস্ক্রিপ্টে কী প্রেস ইভেন্ট প্রবেশ করান


330

আমার কাছে formদুটি পাঠ্য বাক্স রয়েছে, একটি নির্বাচন ড্রপ ডাউন এবং একটি রেডিও বোতামenterকী টিপে গেলে আমি জাভাস্ক্রিপ্ট ফাংশন (ব্যবহারকারী সংজ্ঞায়িত) কল করতে চাই, তবে আমি এটি টিপলে ফর্মটি জমা দেওয়া হয়।

কী চাপলে আমি কীভাবে formজমা দেওয়া থেকে বাধা দেব enter?

উত্তর:


445
if(characterCode == 13)
{
    return false; // returning false will prevent the event from bubbling up.
}
else
{
    return true;
}

ঠিক আছে, সুতরাং কল্পনা করুন আপনার একটি ফর্মের মধ্যে নিম্নলিখিত পাঠ্যবক্স রয়েছে:

<input id="scriptBox" type="text" onkeypress="return runScript(event)" />

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

function runScript(e) {
    //See notes about 'which' and 'key'
    if (e.keyCode == 13) {
        var tb = document.getElementById("scriptBox");
        eval(tb.value);
        return false;
    }
}

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

বিঃদ্রঃ:

এটা তোলে সরু আউট যে হয়েছে keyCodeকরা হয় বর্তমানে অবচিত । পরবর্তী সেরা বিকল্পwhich করেছে এছাড়াও অবচিত হয়েছে

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

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


4
আপনি ব্যবহারকারী দ্বারা সংজ্ঞায়িত বলতে আসলে কি বোঝায়? পছন্দ করুন, ব্যবহারকারী কোনও পাঠ্য বাক্সে কিছু স্ক্রিপ্ট টাইপ করেন এবং আপনি এভাল () ব্যবহার করে এটি চালান ???
জোশ

1
এটি কি এমন পরিস্থিতি যেখানে প্রিভেন্টডিফুয়ালটি ব্যবহার করা যেতে পারে?

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

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


137

উভয় event.whichএবং event.keyCode:

function (event) {
    if (event.which == 13 || event.keyCode == 13) {
        //code to execute here
        return false;
    }
    return true;
};

11
কেন ইভেন্ট.কি এবং ইভেন্ট.কোড উভয়?
অ্যালেক্স স্পারলিং

35
কিছু ব্রাউজার whichঅন্যদের সমর্থন সমর্থন করে keyCode। উভয়কে অন্তর্ভুক্ত করা ভাল অনুশীলন।
ব্যবহারকারীর 568109

ব্যবহার keydownপরিবর্তে ঘটনা keyupবাkeypress
manish_s

@ অজিগনোক তবে এটি কোন ইভেন্টের সাথে যুক্ত করা উচিত?
ডন চ্যাডেল

2
@ মানিশ, কীপ্রেস আপনাকে কীডাউন / আপের চেয়ে বেশি খেলতে দেয়। stackoverflow.com/a/9905293/322537
হারমান Ingjaldsson

78

আপনি যদি jQuery ব্যবহার করছেন:

$('input[type=text]').on('keydown', function(e) {
    if (e.which == 13) {
        e.preventDefault();
    }
});

1
আমি এই কাজ করতে পারে না। হ্যান্ডলারটি আগুন জ্বলে preventDefaultউঠেছে , তবে কমপক্ষে Chrome এ ফর্ম জমা দেওয়া বন্ধ করবে বলে মনে হচ্ছে না।
ড্রয় নোকস

19
আপনাকে কী-আপের পরিবর্তে কীডাউন ইভেন্টটি ব্যবহার করতে হবে:$('input[type=text]').on('keydown', function(e) { if (e.which == 13) { e.preventDefault(); } });
পেটার ডনচেভ মারিনভ

2
জমা দেওয়ার পরে কীআপটি বরখাস্ত করা হয়, এবং তাই এটি বাতিল করতে পারে না।
পিয়েরে-অলিভিয়ের ভেরেস

কীআপ এবং কিপ্রেস উভয়ই আমার পক্ষে কাজ করেছিল। আমি কিপ্রেস নিয়ে গেলাম। ধন্যবাদ!
markiyanm

'keydown'অন্যান্য মন্তব্যকারীরা বিবৃত হিসাবে সঠিক। যেহেতু এটি পরিবর্তন করা হয়নি আমি উত্তর আপডেট করব। আমি এই উত্তরটি ব্যবহার করেছি এবং ফিরে এসে মন্তব্যগুলিতে নজর না দেওয়া পর্যন্ত কিছুক্ষণ আটকে ছিলাম।
ম্যাট কে

71

ইভেন্ট.কি === "প্রবেশ করুন"

আরও সাম্প্রতিক এবং অনেক ক্লিনার: ব্যবহার event.keyআর যথেচ্ছ নম্বর কোড নেই!

const node = document.getElementsByClassName(".mySelect")[0];
node.addEventListener("keydown", function(event) {
    if (event.key === "Enter") {
        event.preventDefault();
        // Do more work
    }
});

মজিলা ডক্স

সমর্থিত ব্রাউজারগুলি


এটি খুঁজছিলেন। ইভেন্টের কনসোল লগে মূল সম্পত্তিটি দেখেছি। ভেবেছি এটি আরও নির্ভরযোগ্য হতে পারে
তাতসু

এটি কি কেবল ম্যাক্রো বা ওরফে নয়? এই কোডটি ব্যবহার করে পারফরম্যান্সের ক্ষেত্রে কোনও লাভ আছে কি?
ক্লকডব্লিউআরকি

1
keyCodeঅবচয় করা হয়। এটি আপনার কোডে ম্যাজিক পূর্ণসংখ্যার চেয়ে বেশি পঠনযোগ্য এবং রক্ষণাবেক্ষণযোগ্য
গিবল্ট


17

onsubmitআপনার ফাংশনে কল হতে ফর্মটির ক্রিয়াকে ওভাররাইড করুন এবং এর পরে মিথ্যা রিটার্ন যুক্ত করুন, অর্থাত:

<form onsubmit="javascript:myfunc();return false;" >

এই পৃষ্ঠায় আমার অন্য একটি ফর্ম জমা
পড়ার কারণে

5
হ্যা, তুমি পারো. জাভাস্ক্রিপ্ট প্রোটোটাইপ ভিত্তিক ভাষা। ডকুমেন্ট.ওফর্মস ["ফর্ম_নাম"] on onsubmit = fucntion () {}
the_drow

ফর্মটি জমা দেওয়ার পরে চালানোর জন্য আমার আরেকটি মুছে ফেলার পদ্ধতি রয়েছে
o

17

একটি প্রতিক্রিয়া জেএস সমাধান

 handleChange: function(e) {
    if (e.key == 'Enter') {
      console.log('test');
    }


 <div>
    <Input type="text"
       ref = "input"
       placeholder="hiya"
       onKeyPress={this.handleChange}
    />
 </div>

9

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

if (event.which === 13 || event.keyCode === 13 || event.key === "Enter")

6

আপনি যদি এখানে বিশুদ্ধ জাভা স্ক্রিপ্ট ব্যবহার করে করতে চান তবে এটি নিখুঁতভাবে কাজ করে এমন একটি উদাহরণ

ধরা যাক এটি আপনার এইচটিএমএল ফাইল

<!DOCTYPE html>
<html>
  <body style="width: 500px">
    <input type="text" id="textSearch"/> 
      <script type="text/javascript" src="public/js/popup.js"></script>
  </body>
</html>

আপনার মধ্যে পপআপ.জেএস ফাইলটিতে কেবল এই ফাংশনটি ব্যবহার করুন

var input = document.getElementById("textSearch");
input.addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 13) {
        alert("yes it works,I'm happy ");
    }
});

5

নীচে কোড শ্রোতার জন্য যোগ করা হবে ENTER পুরো পৃষ্ঠায় কীটির ।

এটি একক অ্যাকশন বোতামের সাথে স্ক্রিনে খুব দরকারী হতে পারে যেমন লগইন, নিবন্ধন, জমা দিন ইত্যাদি

<head>
        <!--Import jQuery IMPORTANT -->
        <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>

         <!--Listen to Enter key event-->
        <script type="text/javascript">

            $(document).keypress(function (e) {
                if (e.which == 13 || event.keyCode == 13) {
                    alert('enter key is pressed');
                }
            });
        </script>
    </head>

সমস্ত ব্রাউজারে পরীক্ষিত।


3

একটি jQuery সমাধান।

আমি এখানে পাঠ্য ইনপুটটিতে অস্পষ্ট ইভেন্টটি বরখাস্ত না করা পর্যন্ত ফর্ম জমা দেওয়ার ক্ষেত্রে বিলম্ব করার উপায় সন্ধান করতে এসেছি।

$(selector).keyup(function(e){
  /*
   * Delay the enter key form submit till after the hidden
   * input is updated.
   */

  // No need to do anything if it's not the enter key
  // Also only e.which is needed as this is the jQuery event object.
  if (e.which !== 13) {
       return;
  }

  // Prevent form submit
  e.preventDefault();

  // Trigger the blur event.
  this.blur();

  // Submit the form.
  $(e.target).closest('form').submit();
});

আরও সাধারণ সংস্করণ পেয়ে ভাল লাগবে যা কেবল ফর্ম জমা দেওয়ার চেয়ে সমস্ত বিলম্বিত ইভেন্টগুলিকে সরিয়ে দিয়েছে।


3

আমার দৃষ্টিকোণ থেকে একটি সহজ এবং কার্যকর উপায় হতে হবে:

function onPress_ENTER()
{
        var keyPressed = event.keyCode || event.which;

        //if ENTER is pressed
        if(keyPressed==13)
        {
            alert('enter pressed');
            keyPressed=null;
        }
        else
        {
            return false;
        }
}

2

টাইপস্ক্রিপ্ট ব্যবহার করে, এবং ফাংশনে বহুবিধ কলগুলি এড়ানো

let el1= <HTMLInputElement>document.getElementById('searchUser');
el1.onkeypress = SearchListEnter;

function SearchListEnter(event: KeyboardEvent) {
    if (event.which !== 13) {
        return;
    }
    // more stuff
}

এই প্রশ্নটি আট বছরেরও বেশি পুরনো। টাইপস্ক্রিপ্ট তখন উপস্থিত ছিল না। সুতরাং আপনি কি নিশ্চিত যে আপনি অন্য প্রশ্নের উত্তর দিচ্ছেন না?
নিকো হাজে

2

একটু সরল

কীপ্রেস "এন্টার" তে ফর্মটি প্রেরণ করবেন না:

<form id="form_cdb" onsubmit="return false">

কীপ্রেস "এন্টার" তে ফাংশনটি সম্পাদন করুন:

<input type="text" autocomplete="off" onkeypress="if(event.key === 'Enter') my_event()">

1

নেটিভ জেএস (আনুন এপিআই)

document.onload = (() => {
    alert('ok');
    let keyListener = document.querySelector('#searchUser');
    // 
    keyListener.addEventListener('keypress', (e) => {
        if(e.keyCode === 13){
            let username = e.target.value;
            console.log(`username = ${username}`);
            fetch(`https://api.github.com/users/${username}`,{
                data: {
                    client_id: 'xxx',
                    client_secret: 'xxx'
                }
            })
            .then((user)=>{
                console.log(`user = ${user}`);
            });
            fetch(`https://api.github.com/users/${username}/repos`,{
                data: {
                    client_id: 'xxx',
                    client_secret: 'xxx'
                }
            })
            .then((repos)=>{
                console.log(`repos = ${repos}`);
                for (let i = 0; i < repos.length; i++) {
                     console.log(`repos ${i}  = ${repos[i]}`);
                }
            });
        }else{
            console.log(`e.keyCode = ${e.keyCode}`);
        }
    });
})();
<input _ngcontent-inf-0="" class="form-control" id="searchUser" placeholder="Github username..." type="text">


ক্লায়েন্ট_আইডি ইত্যাদি এখানে কেন অন্তর্ভুক্ত করা হয়েছে? কোড বৈধ?
এডিপারকিনসন

1
<form id="form1" runat="server" onkeypress="return event.keyCode != 13;">

আপনার এইচটিএমএল পৃষ্ঠায় এই কোডটি যুক্ত করুন ... এটি অক্ষম হবে ... বোতামটি প্রবেশ করান ..


খুব দুর্দান্ত, ধন্যবাদ
ক্রিস অলিনসন

0
<div class="nav-search" id="nav-search">
        <form class="form-search">
            <span class="input-icon">
                <input type="text" placeholder="Search ..." class="nav-search-input" id="search_value" autocomplete="off" />
                <i class="ace-icon fa fa-search nav-search-icon"></i>
            </span>
            <input type="button" id="search" value="Search" class="btn btn-xs" style="border-radius: 5px;">
        </form>

</div>

<script type="text/javascript">
    $("#search_value").on('keydown', function(e) {
        if (e.which == 13) {
             $("#search").trigger('click');
            return false;
        }
    });
    $("#search").on('click',function(){
        alert('You press enter');
    });
</script>

0

ক্রস ব্রাউজার সমাধান

কিছু পুরানো ব্রাউজার একটি মানহীন উপায়ে কীডাউন ইভেন্টগুলি প্রয়োগ করে।

কীবোর্ডএভেন্ট.কি আধুনিক ব্রাউজারগুলিতে এটি প্রয়োগ করার কথা।

which এবং keyCode আজকাল হ্রাস করা হয়, তবে এই ইভেন্টগুলির জন্য যাচাই করা ক্ষতিগ্রস্থ হয় না যাতে আইডির মতো পুরানো ব্রাউজারগুলি ব্যবহার করা ব্যবহারকারীদের পক্ষে কোড কাজ করে।

isKeyPressedফাংশন চেক যদি চাপা কী লিখুন এবং ছিল event.preventDefault()পথে অন্তরায় জমা দেওয়া থেকে ফর্ম।

  if (isKeyPressed(event, 'Enter', 13)) {
    event.preventDefault();
    console.log('enter was pressed and is prevented');
  }

নূন্যতম কাজের উদাহরণ

জাতীয়

function isKeyPressed(event, expectedKey, expectedCode) {
  const code = event.which || event.keyCode;

  if (expectedKey === event.key || code === expectedCode) {
    return true;
  }
  return false;
}

document.getElementById('myInput').addEventListener('keydown', function(event) {
  if (isKeyPressed(event, 'Enter', 13)) {
    event.preventDefault();
    console.log('enter was pressed and is prevented');
  }
});

এইচটিএমএল

<form>
  <input id="myInput">
</form>

https://jsfiddle.net/tobiobeck/z13dh5r2/

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