Allow Copy/Paste in a disabled input text box in Firefox browsers

后端 未结 6 1712
一生所求
一生所求 2020-12-05 06:40

I have a input text box disabled:

   

In IE and in Chrome you can copy and

相关标签:
6条回答
  • 2020-12-05 06:51

    I don't like using readonly="readonly", ever. It leaves the field focusable and reachable via tab keypress and, if, god forbid, the user hits the backspace key while the read-only field is focused, then most browsers treat it like the user hit the 'back' button and bring up the previously viewed page. Not what you want to see happen when you're filling out a large form, especially if you are using some archaic browser that doesn't preserve the form data when you hit the 'next' button to return to it. Also very, very bad when using some single-page web application, where 'back' takes you to a whole other world, and 'next' doesn't even restore your form, much less its data.

    I've worked around this by rendering DIVs instead of input fields when I need the field disabled (or PRE instead of a textarea). Not always easy to do dynamically but I've managed to make fairly short work of it with AngularJS templates.

    If you have time, head over to the Mozilla Bugzilla and ask them to fix it.

    0 讨论(0)
  • 2020-12-05 06:52

    readonly="readonly" will do the job

    it should be supported by the major browsers

    0 讨论(0)
  • 2020-12-05 06:53

    You can accomplish this in share point by utilizing the contenteditable attribute as follows with jquery.

    $("#fieldID").attr("contenteditable", "false");

    This will allow the user to highlight the text and copy it but will not allow them to enter anything in the field.

    0 讨论(0)
  • 2020-12-05 06:59

    tl;dr: Support for selecting and copying text in a disabled field is unreliable; use the readonly attribute or a non-input element, such as a <span> instead, if this functionality is necessary. Use JavaScript to modify the behavior of the readonly input to prevent unwanted behavior such as going back a page when someone hits the backspace key while the readonly input has focus.

    *UPDATE: 2018.12.24

    The spec has changed since this answer was originally posted (thanks to Wrightboy for pointing this out); it now includes the following caveat with regards to disabled fields:

    Any other behavior related to user interaction with disabled controls, such as whether text can be selected or copied, is not defined in this standard.

    — https://html.spec.whatwg.org/multipage/input.html#the-readonly-attribute

    Disabled fields still cannot receive focus nor click events.

    Because the standard does not define whether or not text within disabled controls can be selected or copied and because at least one major browser doesn't support that functionality, it's probably best to avoid relying on that behavior.

    Original Answer

    This is the expected behavior for a disabled field (as of the original date of this answer). IE and Chrome are being generous, but Firefox is behaving appropriately.

    If you want to prevent the user from changing the value of the field, but you still want them to be able to read it, and/or copy it's value, then you should use the readonly attribute. This will allow them to set focus to the element (necessary for copying), and also access the field via the tab button.

    If you are concerned about a user accidentally hitting the backspace button inside the readonly field and causing the browser to navigate back a page, you can use the following code to prevent that behavior:

    document.addEventListener("DOMContentLoaded", function() {
      var inputs = document.querySelectorAll('[readonly]');
      for(var i=0; i < inputs.length; i++){
        inputs[i].addEventListener('keydown', function(e){
          var key = e.which || e.keyCode || 0;
          if(key === 8){
            e.preventDefault();
          }
        })
      }
    });
    <input value="Hello World" readonly=readonly />

    0 讨论(0)
  • 2020-12-05 07:00

    As quick answer, one can have another not disabled element to enable + copy/paste + redisable your input text, like this:

    $('#btnCopy').click(function(){
       $('#txtInputDisabled').removeAttr('disabled');  
       $('#txtInputDisabled').select();
       document.execCommand("copy");
       $('#txtInputDisabled').attr('disabled','disabled');  
    });
    

    You can se my complete response to this post

    0 讨论(0)
  • 2020-12-05 07:14

    Refer to my post to the same question. It does the following:

    1. Makes the textbox just like readonly without using the readonly attribute on the input tag, but will honor tab index and set focus
    2. Supports all clipboard functions win and mac with mouse or keyboard
    3. Allows undo, redo and select all

    Restrict HTML input to only allow paste

    0 讨论(0)
提交回复
热议问题