83

I want to make something which would look like a select input but is actually not, here are the steps.

I made an <input type="text">.

I added a background-image, which will show a "select arrow", giving the impression that it's a select box.

I added a default value to this input.

There will be a hidden div which will SlideDown() right under this input when I click on it.

I tried the read only thing so that the value cannot be changed, but the blinking cursor will show up.

If I use disabled, the blinking cursor will not show up, but the .click() or .focus function in jQuery will not work. The drop down menu will not SlideDown().

How can I make it clickable while not showing the blinking cursor?

Here's the code

<div style="padding-top:17px; overflow:hidden;">
    <div style="float:left;">
        <label for="secretquestion">Secret Question</label><br>
        <input type="text" class="inputselect" id="secretquestion" name="secretquestion" value="Choose a Secret Question" tabindex=10 /><br>
        <div class="selectoptions" id="secretquestionoptions">
            <b>test</b>
        </div> 
    </div>
</div>

CSS

.selectoptions
{
    display: none;
    background-color: white;  
    color: rgb(46,97,158); 
    width: 250px; 
    margin:auto; 
    border-style: solid; 
    border-width:1px; 
    border-color: rgb(46,97,158);  
    font-size: 14px; 
    text-align: center; 
}

.inputselect {
    color: white;  
    cursor: pointer;  
    background-image: url('inputselect.png');
    padding-top: 5px; 
    padding-bottom: 5px;   
    padding-left:10px; 
    padding-right:-10px;
    width:240px; 
    border-style: solid; 
    border-color: rgb(46,97,158); 
    border-width: 1px;
} 
.inputselect:hover {
    outline:none;      
    color:aqua; 
    cursor: pointer; 
    background-image: url('inputselecthover.png');
}
.inputselect:focus {
    outline:none;      
    color:aqua; 
    cursor: pointer; 
    background-image: url('inputselecthover.png');
}
SuperBiasedMan
  • 9,814
  • 10
  • 45
  • 73
user1213707
  • 2,001
  • 3
  • 15
  • 6
  • 2
    [A possible solution](http://stackoverflow.com/questions/3671141/hide-textfield-blinking-cursor). Another solution is to use a div styled to look like an input instead of an actual input. – approxiblue Feb 17 '12 at 18:00
  • @JimmyX yes i thought about that but the thing is, this input (select) is in a form, the input fields all look like each other, and i dont feel like breaking the rule, and design another div with a fake look :P – user1213707 Feb 17 '12 at 18:10
  • ...which takes us back to the first solution (link): create an invisible input on top of the display input, then connect the two with some js. – approxiblue Feb 17 '12 at 18:12
  • I think you will find that the only way to do this is to not use an input field. The behaviors of the form fields are controlled by the browser, they aren't configurable. The only other thing I can think of is to set the focus someplace else, and that will cause other issues. –  Feb 24 '12 at 03:23

8 Answers8

153

Just add this to "inputselect" class:

caret-color: transparent;
cani
  • 1,650
  • 1
  • 6
  • 5
64

The color of the cursor matches the color of the text.

<input type="text" style="color: transparent">

If you actually want to show text in the input box (my, some people are needy), you can use a text shadow.

<style>
    body, div, input {
       color: #afa;
       text-shadow: 0px 0px 1px #fff;
    }
<style>

(tested Firefox and Safari).

Orwellophile
  • 13,235
  • 3
  • 69
  • 45
10

I just used a blur to get rid of the cursor.

$('input').mousedown(function(e){
  e.preventDefault();
  $(this).blur();
  return false;
});
rtconner
  • 1,221
  • 12
  • 19
  • I'm pretty sure the OP doesn't want anybody to be able to type. He said he tried "readonly" but the cursor still appeared. He's just using an input for the sake of keyboard navigation I guess, but wants it to behave like a select box. – Ryan Wheale May 30 '15 at 00:45
9

I think this is a perfect solution: make the input wide enough, align right to screen right, thus make cursor and content locate at the outside of the screen, while it's still clickable

perfect solution

Community
  • 1
  • 1
sinfere
  • 927
  • 8
  • 9
2

try this code it worked on me :-

<div class="input-parent" style="margin-left: 30px;">
     <input type="text" />
</div>


input-parent {
    width: 100px;
    height: 30px;
    overflow: hidden;
    }
.input-parent input {
    width: 120px;
    height: 30px;
    margin-left: -20px;
    text-align: left;
    caret-color: transparent;
    }
1

I finally find a trick solution.

<div class="wrapper">
    <input type="text" />
</div>

.wrappr {
    width: 100px;
    height: 30px;
    overflow: hidden;
}
.wrapper input {
    width: 120px;
    height: 30px;
    margin-left: -20px;
    text-align: left;
}

and in my sitation, it works!

wupeng
  • 63
  • 1
  • 1
  • 10
1

try this

input {
  color: transparent;
  text-shadow: 0 0 0 #2196f3;

  &:focus {
      outline: none;
  }
}
  • 2
    Please read "[answer]" and "[Explaining entirely code-based answers](https://meta.stackoverflow.com/q/392712/128421)". It helps more if you supply an explanation why this is the preferred solution and explain how it works. We want to educate, not just provide code. – the Tin Man Apr 21 '23 at 21:40
0

This may be helpful (though not a complete response) - I used it to disable input in a recent project:

document.getElementById('Object').readOnly = true;
    document.getElementById('Object').style.backgroundColor = '#e6e6e6';
    document.getElementById('Object').onfocus = function(){
        document.getElementById('Object').blur();
    };

The user focuses on the input when the click in it, the blur() function then removes the focus. Between this, setting the readOnly to "True" and setting the background color to grey (#e6e6e6), your user shouldn't get confused.