как использовать триггер в Jquery для передачи данных параметров, а также управления (это) - PullRequest
6 голосов
/ 08 апреля 2010

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

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
    $("#txtFirstName").bind('focusout', function()
   {
   $(this).trigger("customblurfocus",[$(this).val(), $(this).val() + " Required !", "Ok !"]);
   }
  );

  $(this).bind('customblurfocus',function(defaultInputValue,ErrorMessage,ValidMessage)
     {alert($(this).val()); 
     if($(this).val()=="" || $(this).val()==defaultInputValue)
      {
      $(this).val(defaultInputValue);
      $(this).siblings("span[id*='error']").toggleClass("error_set").text(ErrorMessage).fadeOut(3000);  
      }
     else
      {
      $(this).siblings("span[id*='error']").toggleClass("error_ok").text(ValidMessage).show(1000);
      }
     }
   );
    });
</script>

Ответы [ 2 ]

10 голосов
/ 08 апреля 2010

Обновление: Мне кажется, я понял, чего вы хотите достичь, и это должно сработать (нет необходимости в пользовательских событиях):

function validate(element, defaultInputValue, ErrorMessage, ValidMessage) {
    alert($(this).val()); 
    if($(this).val()=="" || $(this).val()==defaultInputValue)
    {
        $(this).val(defaultInputValue);
        $(this).siblings("span[id*='error']").toggleClass("error_set").text(ErrorMessage).fadeOut(3000);  
    }
    else
    {
       $(this).siblings("span[id*='error']").toggleClass("error_ok").text(ValidMessage).show(1000);
    }
}

$(document).ready(function(){
   $("#txtFirstName").bind('focusout', function() {
      validate(this, "defaultValue here", "Error message here", "Valid message here");
   });
});

Если у вас есть вопросы, просто спросите:)


Первый параметр вашего связанного обработчика событий - это сам объект события. См. Пример из .trigger() документации :

$('#foo').bind('custom', function(event, param1, param2) {
  alert(param1 + "\n" + param2);
});
$('#foo').trigger('custom', ['Custom', 'Event']);

и

Объект события всегда передается в качестве первого параметра в обработчик события, но если дополнительные параметры задаются во время вызова .trigger(), как они есть, эти параметры также будут передаваться в обработчик.

Так что ваш должен выглядеть так:

function(event, defaultInputValue, ErrorMessage, ValidMessage)

Но было бы лучше, если бы вы описали, какую ошибку вы действительно получаете.


Второй выпуск: Если я правильно вижу, вторая привязка как-то не имеет смысла:

$(document).ready(function(){
     $("#txtFirstName").bind('focusout', function(){});

     $(this).bind('customblurfocus',function(defaultInputValue,ErrorMessage,ValidMessage)
     { //...
     });
});

С каким элементом вы хотите связать свое пользовательское событие? Каким должен быть $(this)? В этом состоянии, даже если добавить event в качестве первого параметра в функцию, это не будет работать.
Пожалуйста, расскажите нам больше о вашей HTML-структуре и / или о том, чего вы хотите достичь.

1 голос
/ 08 апреля 2010

Вы можете просто сделать вызов своей пользовательской функции в теле обработчика связанных событий:

$("#foo").bind("click", function(){
  callMyFunction( arg0, arg1, arg2 );
});

Е.Г.

function customHandler(defaultInputValue,ErrorMessage,ValidMessage) {
  // define the body of your custom function here
}

$(this).bind('customblurfocus', function(){
  customHandler(defaultInputValue, ErrorMessage, ValidMessage);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...