2011-09-22 26 views
6

Tôi bị kẹt. Đã tìm kiếm và thử hàng giờ liền.Làm thế nào để gọi hàm javascript với tham số trong trình xử lý sự kiện jquery?

EDIT: Tôi vẫn không thể hoạt động. Được rồi, tôi sẽ chỉ đưa mã nguồn để làm rõ những gì tôi muốn hoàn thành.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script> 
    <script type="text/javascript"> 
    var date_fmt="yyyy-mm-dd"; 
    var time_fmt="HH:MM"; 
    var date_field="#id_start_0, #id_end_0"; //id refering to html input type='text' 
    var time_field="#id_start_1, #id_end_1"; //id refereing to html input type='text' 


    function clearFmt(fmt_type) 
    { 
     if($(this).val() == fmt_type) { 
      $(this).val(""); 

     } 
    } 

    function putFmt(fmt_type) 
    { 
     if($(this).val() == "") { 
      $(this).val(fmt_type); 
     } 
    } 


$(document).ready(function() { 

    $(date_field).attr("title",date_fmt); 
    $(time_field).attr("title",time_fmt); 

    $(date_field).click(function() { 
     clearFmt(date_fmt); 
    }); 

    $(date_field).blur(function(){ 
     putFmt(date_fmt); 
    }); 

    $(time_field).click(function(){ 
     clearFmt(time_fmt); 
    }); 

    $(time_field).blur(function(){ 
     putFmt(time_fmt); 
    }); 

}); 
</script> 

Trợ giúp?

+0

Bạn muốn myFunc được đánh giá tại thời điểm nhấp chuột so với lúc khởi tạo, đúng không? –

Trả lời

8

Sử dụng jquery bind phương pháp:

function myfunc(param) { 
    alert(param.data.key); 
} 

$(document).ready(function() { 
    $("#foo").bind('click', { key: 'value' }, myfunc); 
}); 

Xem thêm jsfiddle tôi.

=== CẬP NHẬT ===

từ jquery 1.4.3 bạn cũng có thể sử dụng:

function myfunc(param) { 
    alert(param.data.key); 
} 

$(document).ready(function() { 
    $("#foo").click({ key: 'value' }, myfunc); 
}); 

Xem thêm thứ hai jsfiddle tôi.

CẬP NHẬT === 2 ===

Mỗi chức năng có riêng của mình this. Sau khi gọi clearFmt trong chức năng này, this không còn là phần tử được nhấp. Tôi có hai giải pháp tương tự:

Trong các chức năng của bạn, hãy thêm thông số được gọi là ví dụ: element và thay thế $(this) bằng element.

function clearFmt(element, fmt_type) { 
    if (element.val() == fmt_type) { 
     element.val(""); 
    } 
} 

Gọi hàm bạn phải thêm thông số $(this).

$(date_field).click(function() { 
    clearFmt($(this), date_fmt); 
}); 

Xem thêm third jsfiddle.

- = -

Một thay thế:

function clearFmt(o) { 
    if ($(o.currentTarget).val() == o.data.fmt_type) { 
     $(o.currentTarget).val(""); 
    } 
} 
$(date_field).click({fmt_type: date_fmt}, clearFmt); 

Xem thêm fourth jsfiddle tôi.

+0

@mhd Cảm ơn bạn đã cập nhật, tôi cũng đã cập nhật câu trả lời của mình. – scessor

+0

Cảm ơn rất nhiều! Tôi sử dụng giải pháp jsfiddle thứ 3 của bạn. – mhd

3

Sau đây nên làm việc như đã thấy trong live demo này:

function myfunc(bar) { 
    alert(bar); 
} 

$(function() { 
    $("#foo").click(function() { 
     myfunc("value"); 
    }); 
}); 
0
function myfunc(e) { 
    alert(e.data.bar); //this is set to "value" 
} 

$("#foo").click({bar: "value"}, myfunc); 
0
anyFunctionName = (function() 
{ 
    function yourFunctionName1() 
    { 
     //your code here 
    } 

    function yourFunctionName2(parameter1, param2) 
    { 
     //your code here 
    } 

    return 
    { 
     yourFunctionName1:yourFunctionName1, 
     yourFunctionName2:yourFunctionName2 
    } 
})(); 

$document.ready(function() 
{ 
    anyFunctionName.yourFunctionName1(); 
    anyFunctionName.yourFunctionName2(); 
}); 

Lưu ý: nếu bạn không sử dụng 'anyFuctionName' để khai báo bất kỳ chức năng nào thì không cần phương thức trả lại. chỉ cần viết hàm của bạn đơn giản như, yourFunctionName1().

trong tham số $ document.ready không phải là vấn đề. bạn chỉ cần đặt tên hàm của bạn ở đây. nếu bạn sử dụng chức năng 'anyFuctionName' thì bạn phải làm theo định dạng trên.

0

Mọi người đang thực hiện điều này phức tạp, chỉ cần gọi trực tiếp như bạn thực hiện trong Javascript

myfunc ("giá trị");

Các vấn đề liên quan