ইনপুট টাইপ = "সংখ্যা"


86

আমি কীভাবে একটি বিনিময় পরিচালনা করতে পারি <input type="number" id="n" value="5" step=".5" />? আমি একটি keyupবা করতে পারি না keydown, কারণ, ব্যবহারকারীটি মান পরিবর্তন করতে কেবল তীরগুলি ব্যবহার করতে পারে। আমি যখনই এটি পরিবর্তন করি তখনই এটি পরিচালনা করতে চাই, কেবল অস্পষ্টতার সাথে নয়, যা আমি মনে করি .change()ইভেন্টটি করে। কোন ধারনা?


4
আপনি বুঝতে পেরেছেন যে ইনপুট প্রকারটি IE বা ফায়ারফক্স সমর্থন করে না?
AlienWebguy

এখন এটি ফায়ারফক্স সমর্থিত
এলিফ্যান্টহান্টার

4
caniuse.com/#feat=input-number হ্যাঁ, আমি ছয় বছর আগে থেকে একটি প্রশ্নে মন্তব্য করছি।
পিট

উত্তর:


135

মাউসআপ এবং কীআপ ব্যবহার করুন

$(":input").bind('keyup mouseup', function () {
    alert("changed");            
});

http://jsfiddle.net/XezmB/2/


4
মান পরিবর্তন না হলেও এটি সতর্ক হবে (কেবল যে কোনও জায়গায় ক্লিক করুন input)।
জেমস এলার্ডিস

হ্যা এটা হবে. যদি এটি কোনও সমস্যা হয় তবে আপনার বৈশ্বিক পরিবর্তনশীল ইনপুটটির ইনপুটটিতে বা ইনপুটটিতে কোনও ডাটা উপাদান থাকা উচিত of যখন মাউসআপ ইভেন্টটি আপনার ফাংশনটিকে কল করে, তখন সেই মানটিকে ইনপুটটির বর্তমান মানের সাথে তুলনা করুন। মান পরিবর্তিত হলে কেবল কিছু করুন।
কোলভিনভিন

4
উপাদানটির উপরে মাউস স্ক্রোল দ্বারা মান পরিবর্তন করা হলে এটি কাজ করে না।
ওন্দ্রেজ মাচুলদা

7
স্ক্রোলিং দ্বারা পরিবর্তনগুলি সমর্থন করতে "মাউসওয়েল" ইভেন্টটি যুক্ত করুন।
মার্টিজন

4
যদি ব্যবহারকারী মান পরিবর্তন করতে একটি তীর কী ধরে রাখে তবে তীর কীটি প্রকাশ না হওয়া অবধি এটি চালিত হবে না। inputপরিবর্তে (অন্য উত্তরে প্রস্তাবিত হিসাবে) ব্যবহার করা আরও ভাল কাজ করে বলে মনে হচ্ছে।
জোশ কেলি

76

oninputইভেন্টটি ( .bind('input', fn)) তীর ক্লিক এবং কীবোর্ড / মাউস পেস্ট কীস্ট্রোকগুলিকে থেকে কোনো পরিবর্তন জুড়ে, কিন্তু ইন্টারনেট <9 সমর্থিত নয়।

jQuery(function($) {
  $('#mirror').text($('#alice').val());

  $('#alice').on('input', function() {
    $('#mirror').text($('#alice').val());
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input id="alice" type="number" step="any" value="99">

<p id="mirror"></p>


10

http://jsfiddle.net/XezmB/8/

$(":input").bind('keyup change click', function (e) {
    if (! $(this).data("previousValue") || 
           $(this).data("previousValue") != $(this).val()
       )
   {
        console.log("changed");           
        $(this).data("previousValue", $(this).val());
   }

});


$(":input").each(function () {
    $(this).data("previousValue", $(this).val());
});​

এটি কিছুটা ঘেটো, তবে আপনি যখন ইনপুটের সামান্য তীরগুলির মাধ্যমে বর্ধন / হ্রাসের জন্য মাউসটি ব্যবহার করেন তখন যে ইভেন্টটি চালিত হয় সেগুলি ধরতে আপনি "ক্লিক" ইভেন্টটি ব্যবহার করতে পারেন। আপনি দেখতে পাচ্ছেন যে আমি কীভাবে একটি সামান্য ম্যানুয়াল "চেঞ্জ চেক" রুটিন তৈরি করেছি যা নিশ্চিত করে যে আপনার যুক্তিটি চলবে না যদি না মানটি পরিবর্তিত হয় (ক্ষেত্রের সাধারণ ক্লিকগুলি থেকে মিথ্যা ইতিবাচক প্রতিরোধ করতে)।


6

মাউস বা কী চাপলে কখন তা সনাক্ত করতে, আপনি এগুলিও লিখতে পারেন:

$(document).on('keyup mouseup', '#your-id', function() {                                                                                                                     
  console.log('changed');
});

3
$(':input').bind('click keyup', function(){
    // do stuff
});

ডেমো: http://jsfiddle.net/X8cV3/


মানটি পরিবর্তন না হলে এটি এখনও কার্যকর করা হবে (কেবল যে কোনও জায়গায় ক্লিক করুন input)।
জেমস এলার্ডিস

এটি সত্য, তবে একবার ইভেন্টটি ক্যাপচার করলে তিনি নির্ধারণ করতে পারবেন মানটি পরিবর্তন হয়েছে কিনা।
AlienWebguy

3

কারণ $("input[type='number']")ইন্টারনেট কাজ করে না, আমরা একটি বর্গ নাম অথবা আইডি, উদাহরণস্বরূপ ব্যবহার করা উচিত $('.input_quantity')

এবং .bind()পদ্ধতি ব্যবহার করবেন না । .on()পদ্ধতি দস্তাবেজে ইভেন্ট হ্যান্ডলার সংযোজনের জন্য পছন্দের পদ্ধতি।

সুতরাং, আমার সংস্করণটি হ'ল:

এইচটিএমএল

<input type="number" value="5" step=".5" min="1" max="999" id="txt_quantity" name="txt_quantity" class="input_quantity">

jQuery

<script>
$(document).ready(function(){
    $('.input_quantity').on('change keyup', function() {
        console.log('nice');
    }); 
});
</script>

1

এর চেয়ে ভাল সমাধান হতে পারে তবে এটিই মনে পড়ে:

var value = $("#yourInput").val();
$("#yourInput").on('keyup change click', function () {
    if(this.value !== value) {
        value = this.value;
        //Do stuff
    }        
});

এখানে একটি কাজের উদাহরণ

এটা শুধু একটি ইভেন্ট হ্যান্ডলার binds keyup, changeএবং clickইভেন্ট নেই। এটি মানটি পরিবর্তন হয়েছে কিনা তা যাচাই করে এবং যদি তাই হয় তবে বর্তমান মানটি সংরক্ষণ করে তাই এটি পরের বার আবার চেক করতে পারে। clickইভেন্টটি মোকাবেলা করার জন্য চেক প্রয়োজন ।


নামের একটি ভেরিয়েবলের সাথে বিশ্বব্যাপী সুযোগকে ছড়িয়ে দেওয়া সমস্যার valueজন্য জিজ্ঞাসা করছে।
AlienWebguy

খুবই সত্য. যদিও আপনার উত্তরটি পছন্দ করুন এটি কেবল একটি উদাহরণ। আমি মনে করি @ জ্যাকফিজেলের সম্ভবত সবচেয়ে পরিষ্কার সমাধান আছে।
জেমস এলার্ডিস

1
$("input[type='number']").bind("focus", function() {
    var value = $(this).val();
    $(this).bind("blur", function() {
        if(value != $(this).val()) {
            alert("Value changed");
        }
        $(this).unbind("blur");
    });
});

বা

$("input[type='number']").bind("input", function() {
    alert("Value changed");
});

1
<input type="number" id="n" value="0" step=".5" />
<input type="hidden" id="v" value = "0"/>

<script>
$("#n").bind('keyup mouseup', function () {
    var current = $("#n").val();
    var prevData = $("#v").val(); 
    if(current > prevData || current < prevData){
       $("#v").val(current);
       var newv = $("#v").val(); 
       alert(newv);
    } 
});  
</script>

http://jsfiddle.net/patrickrobles53/s10wLjL3/

পূর্বের মানটির ধারক হওয়ার জন্য আমি একটি লুকানো ইনপুট টাইপ ব্যবহার করেছি যা পরবর্তী পরিবর্তনের সাথে তুলনার জন্য প্রয়োজনীয় হবে।


আপনি data-prevপূর্ববর্তী মান সংরক্ষণ করতে কেবল অ্যাট্রিবিউট ব্যবহার করতে পারেন । অতিরিক্ত ইনপুট ব্যবহার করার দরকার নেই
shukshin.ivan

1

আমার একই সমস্যা ছিল এবং আমি এই কোডটি ব্যবহার করে সমাধান করেছি

এইচটিএমএল

<span id="current"></span><br>
<input type="number" id="n" value="5" step=".5" />

আপনি মাত্র 3 টি প্রথম লাইন যুক্ত করতে পারেন অন্য অংশগুলি alচ্ছিক।

$('#n').on('change paste', function () {
    $("#current").html($(this).val())   
});
// here when click on spinner to change value, call trigger change
$(".input-group-btn-vertical").click(function () {
   $("#n").trigger("change");
});
// you can use this to block characters non numeric
$("#n").keydown(function (e) {
    // Allow: backspace, delete, tab, escape, enter and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 || (e.keyCode === 65 && e.ctrlKey === true) || (e.keyCode >= 35 && e.keyCode <= 40)) 
           return;

    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) 
       e.preventDefault();
});

এখানে উদাহরণ: http://jsfiddle.net/XezmB/1303/

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