質問

I am new to JavaScript, and I am repairing a bug from someone else's code. My question is that every time a user on the form presses the enter key on a text box it triggers a windows.confirm "messagevar confirm = window.confirm('Remove Design Check Date?')";, what I believe is happening is that there is an event handler being captured when the form loads which triggers the calendar.

Here is the original code:

$jQuery(document).ready(function(){ 
$('printableDesignLog').hide();
$('add').hide();
$('orders_Input').hide();
$('newOrder_div').hide();
$('designLog_Details').hide();
$('jobNumber').focus();

getDesigners();
new Ajax.Autocompleter("jobNumber","jobNumbers", 
baseURL + "search.php?task=getJobNumbers_WithSeparator",{
     minChars: 2,
     frequency: 0.1,
indicator: 'indicator',
afterUpdateElement : setJobNumber});

Date.format = 'mmm dd, yyyy';
$j(function(){
$j('#Design_Date')
   .datePicker({createButton:true, startDate:'Jan 01, 2006',        
    endDate:'Dec 31, 2015'})
   .bind('click', function(){               
$j(this).dpDisplay();
    this.blur();
    return false;
    })
    .dpSetOffset(-50, 20) // Move calender just above/right
    .bind('dateSelected', function(e, selectedDate, $td){
 $('DesignDate').value = selectedDate.format("yyyy-mm-dd");
    });

    });
 $j(function(){
 $j('#FollowUp_Dt')
    .datePicker({createButton:true, startDate:'Jan 01, 2010', endDate:'Dec 31, 2015'})
    .bind('click', function(){              
 $j(this).dpDisplay();
     this.blur();
     return false;
     })
    .dpSetOffset(-150, -150) // move calendar above the button to the left
    .bind('dateSelected', function(e, selectedDate, $td){
 $('FollowUpDt').value = selectedDate.format("yyyy-mm-dd");
     });
     });

     }); 

Below is the code that I tried. I tried to disable the enter key event as it is not needed in this form, I am using javascript prototype version '1.6.0.2', and jquery version 1.2.6 but when I enter the below code it doesn't recognise keydown, and it outputs the following error in IE "Unable to get property 'keydown' of undefined or null reference". Thank you for your assistance.

function preventDefault() {
   var e = this.originalEvent;

   this.isDefaultPrevented = returnTrue;
   if ( !e ) {
       return;
 }

 [// If preventDefault exists, run it on the original event]
     if ( e.preventDefault ) {
     e.preventDefault();

 [// Support: IE]
 [// Otherwise set the returnValue property of the original event to false]
} else {
      e.returnValue = false;
      }
      }


jQuery(document).ready(function(){ 
    $('input[type=text]').keydown(function(event){
    if (event.which == 13){
        $('input[type=text]').unbind();
        event.preventDefault();
        }
    });
 });

Here is the code for the windows.confirm message box that keeps coming up

function removeDesignCheckDate(id)
{
j( ".JQCancelSubmit" ).keypress(function(event) {
    var code = (event.keyCode ? event.keyCode : event.which);
        if (code == 13) { //Enter
            return false;
        }
});

var confirm = window.confirm('Remove Design Check Date?') ;
//confirm.blur();
if (!confirm) return ;
var jobNumber = $j('#jobNumber').val() ;
var tmp = id.split('-',2);//split to 0:- field name & 1:- DesignOrderID
//$j('#msg').html(tmp[0] + ' | ' + tmp[1] + ' > '+ $j('#'+id).val());
//i.e. tmp[0] is the field name; tmp[1] is the DesignOrderID

//construct data object:
var d = new Object(); 
d[eval('"'+tmp[0]+'"')] = $j('#' + id).val(); 
var data = Object.toJSON(d);

var callback = function(response){
    if (response.error) { // display error
       $(id).focus();
 $j('#msg').html('check your input ...');
 setTimeout("$('msg').innerHTML = ''", 3000);//reset the result after 10sec
 }else {
 $j('#msg').html('Changes Saved ...');
//$j(id).html('') ;
refreshAfterDelete(jobNumber); 
setTimeout("$j('#msg').html('')", 3000);//reset the result after 10sec
(tmp[0]).match('Date') ? updateDaysToDesignCompletion(tmp[1]) : '';
}
};
$j.ajax({
    type: 'post',
    dataType: 'json',
    url: controller, 
    data: 'task=removeDesignCheckDate' + '&DesignOrderID=' + tmp[1] + 
         '&dummy=' + new Date().getTime(),
    success: callback
});

}
役に立ちましたか?

解決

Try this;

 $('body').on('keypress', '.JQCancelSubmit', function (event) {
                var code = (event.keyCode ? event.keyCode : event.which);
                if (code == 13) { //Enter
                    return false;
                }
            });

Put the css class 'JQCancelSubmit' on your input that you whant cancel submit

Edit 1

or for previus versions this may work:

$('.JQCancelSubmit').bind('keypress',function(event){

  var code = (event.keyCode ? event.keyCode : event.which);
                    if (code == 13) { //Enter
                        return false;
                    }
})

Edit 2

you could try this

$( ".JQCancelSubmit" ).keypress(function(event) {
       var code = (event.keyCode ? event.keyCode : event.which);
                        if (code == 13) { //Enter
                            return false;
                        }
});

Edit 3

function removeDesignCheckDate (id){

/// your code; }

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top