Как запустить проверку только при нажатии кнопки или вводе: отправить - PullRequest
1 голос
/ 25 ноября 2010

Я использую панель обновлений на своей странице asp и выполняю проверку JQuery при асинхронной обратной передаче ...

Я просто хочу проверить свою форму только при нажатии кнопки или отправке ... Моя проблема в том, что все мои кнопки находятся в разных формах и не загружаются одновременно ... вот почему я не могу взять идентификаторы кнопок и использовать события нажатия ... здесь мой код ..

 Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(ValidateMyForm);
 function ValidateMyForm(sender, args) {
            var objPost = args.get_postBackElement();
            if (objPost === null || objPost === undefined) return;
            if (objPost.id == '<%= ((Button)(formViewinfo.FindControl("btnUpdate"))).ClientID %>') {
                $('#pnlerrors').fadeOut('fast');
                $('#pnlItemErrors').fadeOut('fast');

                var isValid = $('#form1').validate({
                    errorClass: 'error',
                    invalidHandler: function (e, validator) {
                        var errors = validator.numberOfInvalids();
                        if (errors) {
                            $('#pnlerrors').html('<p>&nbsp;Please correct the errors  </p>').fadeIn('fast');
                            document.location.href = '#pnlerrors';
                        }
                    }, submitHandler: function () {

                    }
                }).form();

                if (!isValid) {
                    CancelPostback(sender, args);
                } else {

                }

            }
            //this is for rest of buttons
            else {
                $('#pnlItemErrors').fadeOut('fast');
                $('#pnlerrors').fadeOut('fast');
                var isValid = $('#form1').validate({
                    errorClass: 'error',
                    invalidHandler: function (e, validator) {
                        var errors = validator.numberOfInvalids();
                        if (errors) {
                            $('#pnlerrors').fadeOut('fast');
                            document.location.replace('#', '#pnlItemErrors');
                            $('#pnlItemErrors').html('<p>&nbsp;Please correct the errors </p>').fadeIn('fast');
                            document.location.href = '#pnlItemErrors';
                        }
                    }, submitHandler: function () {
                    }
                }).form();

                if (!isValid) {
                    CancelPostback(sender, args);
                } else {

                }

            }
        }

Все, что я хочу сделать, это: 2-я проверка только на кнопку «Отправить» не для всех ... Я получаю другие постбэки на этой странице, и эти посты также проверяются каждый раз (я хочу этого избежать) ...

Я не знаю, хорош этот подход или нет ... Я давно борюсь с этим ... Я очень ценю вашу помощь ...

Ответы [ 4 ]

1 голос
/ 25 ноября 2010

При условии, что вы не хотите отправить форму, когда кто-то нажимает кнопку ввода, и , что вы хотите отправить форму только после нажатия submitкнопка:

$(document).ready(
    function(){
        $('form').keypress(
            function(event){
                if (event.keyCode == '13'){

                    return false;
                }
            });
        $('input:submit').click(
            function(){
                $(this).closest('form').submit();
            });
        $('form').submit(
            function(){
                $('#success').text('form submitted! (Not really...)');
                return false;
                // Just to stop the error messages
                // in this demo.
            });
    });

Здесь есть демонстрация JS Fiddle, здесь: http://jsfiddle.net/davidThomas/5PaWz/.

Если я ошибаюсь в своих предположениях, оставьте комментарий, и я постараюсьпоправь себя.

1 голос
/ 26 ноября 2010

ооо ... Бог наконец-то нашел решение для моей проблемы ... Прежде всего, я прошу прощения, если мой вопрос не ясен ....

Моя проверка работает на асинхронных отправителях сообщений ... Я просто хочу проверить свою форму по нажатию кнопки ... у меня действительно есть вид сетки asp.net на моей странице ... если я нажимаю на страницу или что-то в сетке, которая запускается проверка ... я хочу избежать этого ..

для этого я ... захватывает элемент обратной передачи со следующим утверждением.

var objPost = args.get_postBackElement();

тогда я проверяю тип ..

if (objpost.type == 'submit') { do validation }
else { don't }..

это заканчивает мою двухдневную борьбу ... Большое спасибо за вашу поддержку и помощь ...

1 голос
/ 25 ноября 2010

если ваша проблема только в том, чтобы найти кнопки, требующие проверки, тогда один из способов обойти это - добавить класс к кнопкам, которые вы хотите активировать, например:

<asp:button id="btn1" cssclass="Validate"/>

тогда вы можете получить все эти кнопки в JQuery:

var buttons = $('.Validate');

получить идентификатор каждой кнопки:

$(buttons).each(function(){
   var id = this.id;
});
0 голосов
/ 26 ноября 2010

Попробуйте другой подход. Используйте кнопку asp.Net с UseSubmitBehavior = true для отправки и используйте asp.Net Button с UserSubmitBehavior = false для кнопок, которые не должны запускать процесс проверки добавьте следующий код в вашу форму

function ValidateForm()
{   
   var errors ="";
   if (typeof(Page_ClientValidate) == 'function') 
   {
        if (typeof (Page_ClientValidate) == 'function') { Page_ClientValidate();     } 
        if (!Page_IsValid)
        {                        
               for (i = 0; i < Page_Validators.length; i++) {         
                var inputControl = document.getElementById(Page_Validators[i].controltovalidate);               
                if (!Page_Validators[i].isvalid) {                                                        
                    errors = errors + ";" +  Page_Validators[i].errormessage;
                    inputControl.style.border ="solid 2px #FF0000";
                }                        
              }
        }    

        return Page_IsValid;
  }
  return true; 
}

$(document).ready(function(){  
/*********************************************************************/
///handle form submittion and run validation prior to that 
///if a textbox has required field validator, stop form submittion and
/// highlight the text box
/*********************************************************************/                            
  $('#form1').submit(function(){                                                
       return   ValidateForm(); 
       });            
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...