How can I check if a value is changed on blur event?

前端 未结 10 1212
时光说笑
时光说笑 2021-02-07 06:29

Basically I need to check if the value is changed in a textbox on the \'blur\' event so that if the value is not changed, I want to cancel the blur event.

If it possible

相关标签:
10条回答
  • 2021-02-07 06:54

    Within the onblur event, you can compare the value against the defaultValue to determine whether a change happened:

    <input onblur="if(this.value!=this.defaultValue){alert('changed');}">
    

    The defaultValue will contain the initial value of the object, whereas the value will contain the current value of the object after a change has been made.

    References:

    value vs defaultValue

    0 讨论(0)
  • 2021-02-07 06:55

    I know this is old, but I figured I'd put this in case anyone wants an alternative. This seems ugly (at least to me) but having to deal with the way the browser handles the -1 index is what was the challenge. Yes, I know it can be done better with the jquery.data, but I'm not that familiar with that just yet.

    Here is the HTML code:

    <select id="selected">
      <option value="1">A</option>
      <option value="2">B</option>
      <option value="3">C</option>
    </select>
    

    Here is the javascript code:

    var currentIndex; // set up a global variable for current value
    
    $('#selected').on(
      { "focus": function() { // when the select is clicked on
          currentIndex = $('#selected').val(); // grab the current selected option and store it
          $('#selected').val(-1); // set the select to nothing 
        }
      , "change": function() { // when the select is changed
          choice = $('#selected').val(); // grab what (if anything) was selected
          this.blur(); // take focus away from the select
          //alert(currentIndex);
          //setTimeout(function() { alert(choice); }, 0);
        }
      , "blur": function() { // when the focus is taken from the select (handles when something is changed or not)
          //alert(currentIndex);
          //alert($('#selected').val());
          if ($('#selected').val() == null) { // if nothing has changed (because it is still set to the -1 value, or null)
            $('#selected').val(currentIndex); // set the value back to what it originally was (otherwise it will stay at what was newly selected)
          } else { // if anything has changed, even if it's the same one as before
            if ($('#selected').val() == 2) { // in case you want to do something when a certain option is selected (in my case, option B, or value 2) 
                alert('I would do something');
            }
          }
        }
      });
    
    0 讨论(0)
  • 2021-02-07 06:55

    Something like this. Using Kevin Nadsady's above suggestion of

    this.value!=this.defaultValue

    I use a shared CSS class on a bunch of inputs then do:

        for (var i = 0; i < myInputs.length; i++) {
            myInputs[i].addEventListener('blur', function (evt) {
                if(this.value!=this.defaultValue){
                    //value was changed now do your thing
                }
            });
            myInputs[i].addEventListener('focus', function (evt) {
                evt.target.setAttribute("value",evt.target.value);
            });
        }
    
    0 讨论(0)
  • 2021-02-07 06:55

    Even if this is an old post, I thought i'd share a way to do this with simple javascript.

    The javascript portion:

    <script type="text/javascript">
    function HideLabel(txtField){
    	    if(txtField.name=='YOURBOXNAME'){
    	        if(txtField.value=='YOURBOXNAME')
    	            txtField.value = '';
    	        else
    	            txtField.select();
    	        
    	    }
    	}
    	function ShowLabel(YOURBOXNAME){
    	    if(txtField.name=='YOURBOXNAME'){
    	        if(txtField.value.trim()=='')
    	            txtField.value = 'YOURDEFAULTVALUE';
    	    }
    	}
    </script>

    Now the text field in your form:

    <input type="text" id="input" name="YOURBOXNAME" value="1" onfocus="HideLabel(this)" 
    onblur="ShowLabel(this)">
    And bewn! No Jquery needed. just simple javascript. cut and paste those bad boys. (remember to put your javascript above the body in your html)

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