মাউস ফোকাস সেট করুন এবং jQuery ব্যবহার করে ইনপুটটির শেষে कर्सर সরান move


96

এই প্রশ্নটি কয়েকটি ভিন্ন ফর্ম্যাটে জিজ্ঞাসা করা হয়েছে তবে আমি আমার দৃশ্যে কাজ করার জন্য কোনও উত্তর পেতে পারি না।

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

আমার কোডটি যেমন:

$(document).keydown(function(e) {
  var key   = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
  var input = self.shell.find('input.current:last');

  switch(key) {
    case 38: // up
      lastQuery = self.queries[self.historyCounter-1];
      self.historyCounter--;
      input.val(lastQuery).focus();
// and it continues on from there

ফোকাসের পরে কীভাবে আমি কার্সারটিকে 'ইনপুট'-এর শেষে রাখতে বাধ্য করতে পারি?

উত্তর:


145

ফোকাস করার পরে মানটি সাফ করার মতো কাজগুলি পুনরায় সেট করার মতো মনে হচ্ছে।

input.focus();
var tmpStr = input.val();
input.val('');
input.val(tmpStr);

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

4
এটি এফএফ এবং ক্রোম দিয়ে সূক্ষ্মভাবে কাজ করে তবে আইই তে নয় .. IE এ এই সমস্যাটি কীভাবে সমাধান করতে হয় কেউ জানেন?
জন স্মিথ

4
আপনি কলগুলি চেইন করতে পারেন তাও নোট করুন:var temp = input.focus().val(); input.val('').val(temp);

21
এটি আরও সহজ পেতে পারে:input.focus().val(input.val());
ফতেহ খালসা

4
কাজ করে বলে মনে হচ্ছে না contenteditableউপাদানগুলির কোনও কারণে , সম্ভবত এর .html()চেয়ে .val()
কারও

55

এটি কিছুটা অদ্ভুত, এমনকি নির্বোধ দেখাচ্ছে তবে এটি আমার পক্ষে কাজ করছে:

input.val(lastQuery);
input.focus().val(input.val());

এখন, আমি নিশ্চিত না যে আমি আপনার সেটআপটি প্রতিলিপি করেছি। আমি ধরে নিচ্ছি inputএকটি <input>উপাদান।

মানটিকে পুনরায় সেট করে (নিজে থেকে) আমি মনে করি ইনপুটটির শেষে কার্সারটি স্থাপন করা হচ্ছে। ফায়ারফক্স 3 এবং এমএসআইই 7 তে পরীক্ষিত।


4
হ্যাঁ, ইনপুট একটি <ইনপুট> উপাদান। আমি এটি চেষ্টা করেছি এবং এটি এফএফ 3 বা সাফারি 4
জেরোডস্যান্টো

এই সম্পর্কে কোন আপডেট? আমার জন্য কাজ করেছেন। কোনও সমাধান আপডেট পেলে প্রশ্ন আপডেট করুন বা একটি উত্তর যুক্ত করুন।
আর্টল্যাং

FF15 এ এটি ইনপুট ক্ষেত্রের শুরুতে কার্সার সেট করে। এটির কাজটি জরিমানা ব্যতীত আপনারও কি এফএফ-এর সমাধান রয়েছে?
জোচেনজং

@ জোচেনজং ২০০৯ সাল থেকে আমি এটির দিকে নজর দিইনি - এটি তখন এফএফ 3 এবং জিকুয়েরির সাথে কাজ করেছিল। যদি আপনি বর্তমান jQuery এবং FF15 ব্যবহার করে কোনও সমাধান নিয়ে আসে তবে দয়া করে নির্দ্বিধায় এই পোস্টটি সম্পাদনা করুন।
আর্টলং

47

আশা করি এটি আপনাকে সহায়তা করবে:

var fieldInput = $('#fieldName');
var fldLength= fieldInput.val().length;
fieldInput.focus();
fieldInput[0].setSelectionRange(fldLength, fldLength);

4
দুর্দান্ত কাজ করে, আমি মনে করি এটি মান পুনরায় সেট করার চেয়ে ভাল সমাধান, বিশেষত যখন কোনও ধরণের মডেল-ভিউ-বাইন্ডিং রয়েছে।
morten.c

4
এটি সঠিক উত্তর, সেট না করা ছাড়া আপনি ঠিক কী সেট করতে চান সেটি সেট করা।
ড্যান ব্যারন

14

ক্রিস কইয়ার এর জন্য একটি মিনি jQuery প্লাগইন রয়েছে যা পুরোপুরি ভালভাবে কাজ করে: http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/

সমর্থিত হলে এটি সেটলেশনরেঞ্জ ব্যবহার করে , অন্যথায় শক্ত ফলব্যাক রয়েছে।

jQuery.fn.putCursorAtEnd = function() {
  return this.each(function() {
    $(this).focus()
    // If this function exists...
    if (this.setSelectionRange) {
      // ... then use it (Doesn't work in IE)
      // Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh.
      var len = $(this).val().length * 2;
      this.setSelectionRange(len, len);
    } else {
      // ... otherwise replace the contents with itself
      // (Doesn't work in Google Chrome)
      $(this).val($(this).val());
    }
    // Scroll to the bottom, in case we're in a tall textarea
    // (Necessary for Firefox and Google Chrome)
    this.scrollTop = 999999;
  });
};

তারপরে আপনি ঠিক করতে পারেন:

input.putCursorAtEnd();

আশ্চর্যজনক ধন্যবাদ, কেবলমাত্র 2040 টি সমাধান পেয়েছি যা নির্ভরযোগ্যভাবে কাজ করে।
অ্যাডাম জোনস


8

2 আর্টলুংয়ের উত্তর: এটি কেবল আমার কোডে দ্বিতীয় লাইনের সাথে কাজ করে ( আই 7, আই 8; জ্যাকোরি ভি 1.6 ):

var input = $('#some_elem');
input.focus().val(input.val());

সংযোজন: যদি ইনপুট উপাদান jQuery ব্যবহার করে DOM যোগ করা হয়েছে, নজরদারি IE তে সেট করা নেই। আমি একটি সামান্য কৌশল ব্যবহার করেছি:

input.blur().focus().val(input.val());

4
এই ধরণের আমার জন্য কাজ করেছিল, তবে আমাকে এরকম কিছু করতে হয়েছিল: var ইনপুট = $ ("# ইনপুটআইডি"); tmp = ইনপুট.ভাল (); ইনপুট.ফোকাস ()। ভাল ("")। ব্লার ()। ফোকাস ()। ভাল (টিএমপি);
will824

@ will824 আপনার মন্তব্য সমাধান আমার জন্য কাজ করেছে। আমি উত্তর হিসাবে পোস্ট করছি।
আমির শাহজাদ

8

রেফ: @ উইল ৮৪৪ মন্তব্য, এই সমাধানটি আমার পক্ষে কোনও সামঞ্জস্যতার সমস্যা ছাড়াই কাজ করেছে। IE9 এ বাকী সমাধান ব্যর্থ হয়েছে।

var input = $("#inputID");
var tmp = input.val();
input.focus().val("").blur().focus().val(tmp);

পরীক্ষিত এবং এতে কাজ করতে দেখা গেছে:

Firefox 33
Chrome 34
Safari 5.1.7
IE 9

6

আমি জানি এই উত্তরটি দেরিতে আসে তবে আমি দেখতে পাই লোকেরা উত্তর খুঁজে পায় নি। return falseইভেন্টটি পরিচালনা করার পদ্ধতি থেকে শুরুতে কার্সারটি শুরু করতে আপ কীটি প্রতিরোধ করতে । এটি ইভেন্ট চেইনটি থামিয়ে দেয় যা কার্সার আন্দোলনের দিকে নিয়ে যায়। নীচে ওপি থেকে সংশোধিত কোড আটকানো:

$(document).keydown(function(e) {
  var key   = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
  var input = self.shell.find('input.current:last');

  switch(key) {
    case 38: // up
      lastQuery = self.queries[self.historyCounter-1];
      self.historyCounter--;
      input.val(lastQuery).focus();
      // HERE IS THE FIX:
      return false; 
// and it continues on from there

4
আপনি দ্বিতীয় লাইনটি হ্রাস করতে পারবেনvar key = e.charCode || e.keyCode || 0;
কোডিং করুন

6

আমি নীচে কোড ব্যবহার করি এবং এটি সূক্ষ্মভাবে কাজ করে

function to_end(el) {
            var len = el.value.length || 0;
            if (len) {
                if ('setSelectionRange' in el) el.setSelectionRange(len, len);
                else if ('createTextRange' in el) {// for IE
                    var range = el.createTextRange();
                    range.moveStart('character', len);
                    range.select();
                }
            }
        }

6

এটি বিভিন্ন ব্রাউজারের জন্য আলাদা হবে:

এটি এফএফ-তে কাজ করে:

    var t =$("#INPUT");
    var l=$("#INPUT").val().length;
    $(t).focus();

    var r = $("#INPUT").get(0).createTextRange();
    r.moveStart("character", l); 
    r.moveEnd("character", l);      
    r.select();

আরো বিস্তারিত এখানে এই প্রবন্ধগুলোতে হয় SitePoint , AspAlliance


4

অন্যান্য মত, পরিষ্কার এবং পূরণ আমার জন্য কাজ:

    var elem = $('#input_field');
    var val = elem.val();
    elem.focus().val('').val(val);

3

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

এই যুক্তিটি একটি অ্যাপ্লিকেশন যা আমার একটি অ্যাপ্লিকেশন সঙ্গে কাজ করে <input> মান সহ তোলে <button>val()প্রথম সেট করা হয়। তারপরfocus()

$('button').on('click','',function(){
    var value = $(this).attr('value');
    $('input[name=item1]').val(value);
    $('input[name=item1]').focus();
});

ইউ দুই পরিবর্তে এটি আরো সহজ এক লাইন করতে পারেন:$('input[name=item1]').val(value).focus();
inMILD

2

আমি উপরে কিছু লোকের পরামর্শ অনুসারে একই জিনিসটি পেয়েছি। আপনি যদি focus()প্রথমে, তারপরে ইনপুটটিতে চাপ দিন val(), ফায়ারফক্স, ক্রোম এবং আইইয়ের ইনপুট মানটির শেষের দিকে কার্সারটি অবস্থান করবে। যদি আপনি ধাক্কাval() প্রথমে ইনপুট ফিল্ডে প্রবেশ করেন তবে ফায়ারফক্স এবং ক্রোম শেষে কার্সারটি অবস্থান করে, তবে আপনি যখন আসেন তখন IE এটি সামনে রাখে focus()

$('element_identifier').focus().val('some_value') 

কৌশলটি করা উচিত (এটি সবসময় আমার পক্ষে থাকে) has


2

প্রথমে আপনাকে নির্বাচিত টেক্সটবক্স অবজেক্টে ফোকাস সেট করতে হবে এবং তারপরে আপনি মানটি সেট করবেন।

$('#inputID').focus();
$('#inputID').val('someValue')

4
আমি এটি চেষ্টা করেছিলাম কিন্তু কাজ করে না। এটি কি আপনার জন্য কোনও ডিভ কনটেন্ট সম্পাদনাযোগ্য সত্য হিসাবে সেট করে কাজ করে?
রূপম দত্ত

1
    function focusCampo(id){
        var inputField = document.getElementById(id);
        if (inputField != null && inputField.value.length != 0){
            if (inputField.createTextRange){
                var FieldRange = inputField.createTextRange();
                FieldRange.moveStart('character',inputField.value.length);
                FieldRange.collapse();
                FieldRange.select();
            }else if (inputField.selectionStart || inputField.selectionStart == '0') {
                var elemLen = inputField.value.length;
                inputField.selectionStart = elemLen;
                inputField.selectionEnd = elemLen;
                inputField.focus();
            }
        }else{
            inputField.focus();
        }
    }

$('#urlCompany').focus(focusCampo('urlCompany'));

সমস্ত ব্রাউজারের জন্য কাজ করে ..


1

এখানে অন্য একটি, একটি লাইনার যা মানটিকে আবার স্বাক্ষর করে না:

$("#inp").focus()[0].setSelectionRange(99999, 99999);


0

বিচ্ছু 9 এর উত্তর কাজ করে। এটি আরও পরিষ্কার করার জন্য নীচে আমার কোডটি দেখুন,

<script src="~/js/jquery.js"></script> 
<script type="text/javascript">
    $(function () {
        var input = $("#SomeId");
        input.focus();
        var tmpStr = input.val();
        input.val('');
        input.val(tmpStr);
    });
</script>

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