2010-04-07 27 views
6

Tôi đang cố gắng sử dụng cùng chức năng xác nhận cho tất cả các điều khiển của mình. Nhưng tôi không biết nhiều về jQuery và không thể chuyển trình xử lý sự kiện tới trình kích hoạt. Tôi muốn chuyển id hộp văn bản đến hàm tùy chỉnh của tôi. Làm thế nào tôi có thể làm điều nàycách sử dụng trình kích hoạt trong Jquery để chuyển dữ liệu tham số cũng như điều khiển (điều này)

<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> 

Trả lời

10

Cập nhật: Tôi nghĩ rằng tôi đã tìm ra những gì bạn muốn đạt được và điều này nên làm việc (không có nhu cầu trong các sự kiện tùy chỉnh):

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"); 
    }); 
}); 

Nếu bạn có thắc mắc, chỉ cần hỏi:)


Tham số đầu tiên cho trình xử lý sự kiện ràng buộc của bạn là chính đối tượng sự kiện. Xem ví dụ từ .trigger() documentation:

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

và:

Đối tượng sự kiện luôn được thông qua như là tham số đầu tiên để xử lý sự kiện, nhưng nếu tham số bổ sung được quy định trong khi gọi .trigger() vì họ là ở đây, các thông số này cũng sẽ được chuyển đến trình xử lý.

Vì vậy, bạn nên xem xét như thế này:

function(event, defaultInputValue, ErrorMessage, ValidMessage) 

Nhưng nó sẽ là tốt hơn nếu bạn mô tả những gì lỗi bạn thực sự nhận được.


Thứ hai vấn đề: Nếu tôi thấy một cách chính xác các ràng buộc thứ hai là bằng cách nào đó mà không bối cảnh:

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

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

Để yếu tố nào làm bạn muốn để ràng buộc sự kiện tùy chỉnh của bạn? $(this) sẽ là gì? Trong trạng thái này, ngay cả khi thêm event làm tham số đầu tiên cho hàm, điều này sẽ không hoạt động.
Vui lòng cho chúng tôi biết thêm về cấu trúc HTML của bạn và/hoặc những gì bạn muốn đạt được.

1

Bạn chỉ có thể thực hiện cuộc gọi đến chức năng tùy chỉnh của bạn trong cơ thể của xử lý sự kiện ràng buộc:

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

Ví dụ:

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

$(this).bind('customblurfocus', function(){ 
    customHandler(defaultInputValue, ErrorMessage, ValidMessage); 
}); 
Các vấn đề liên quan