2013-07-17 14 views
12

tôi có đầu vào này ẩn:jQuery kiện về biến đổi giá trị của đầu vào ẩn

<input id="j_idt26:myValue" type="hidden" name="j_idt26:myValue" value="0?100?"> 

tôi muốn thông báo với "hey" lần đầu tiên giá trị được thiết lập và sau đó mỗi khi nó thay đổi.

Tôi có một cái gì đó như thế này:

$(document).ready(function(){ 
    var $hello= $('[id$=myValue]'); 

    $hello.bind("change load", function(){ 
     alert('hey'); 
    }); 
}); 

Nhưng không có gì được hiển thị.
Nếu bạn có thể giúp
Cảm ơn

+0

Làm thế nào để bạn thay đổi giá trị đầu vào? Sử dụng val() theo chương trình? –

+0

Bạn đang sử dụng phiên bản jquery nào? –

+0

Tôi đang sử dụng JQuery 1.8.3. Đó là một ứng dụng Java JSF vì vậy nó có lập trình. –

Trả lời

16
$(function(){ 
    var $hello= $('[id$="myValue"]'); 

    $hello.on("change", function(){ //bind() for older jquery version 
     alert('hey'); 
    }).triggerHandler('change'); //could be change() or trigger('change') 
}); 

Sau đó, mỗi khi bạn thay đổi giá trị của đầu vào ẩn nhắm mục tiêu, điều khiển kích hoạt, ví dụ:

$('#j_idt26:myValue').val('0?200?').triggerHandler('change'); 

Đó là do sự kiện onchange không được kích hoạt tự động thay đổi giá trị của nó theo chương trình.

+0

Cảm ơn! Đó là câu trả lời, bởi vì tôi đã thay đổi giá trị theo chương trình;) –

0

Bạn có thể thử mã này:

$(function(){ 
    var $hello = $('[id$="myValue"]'); 

    $hello.bind("change load", function(){ 
     alert('hey'); 
    }); 
}); 
2

Sự kiện thay đổi được kích hoạt sau sự kiện blur trên đầu vào, nói cách khác khi đầu vào mất tiêu điểm. Tài liệu MDN mô tả điều này:

Khi yếu tố mất tiêu điểm sau khi thay đổi giá trị, nhưng không được cam kết (ví dụ: sau khi chỉnh sửa giá trị hoặc).

Kể từ khi input là loại ẩn sẽ không bao giờ có bất kỳ tương tác người dùng với input có nghĩa là nó sẽ không thay đổi trừ khi kịch bản phía khách hàng được cung cấp bởi trang web của bạn thay đổi nó, mà sẽ không kích hoạt sự kiện thay đổi.

Dưới đây là hai lựa chọn:

Gọi thay đổi() một cách rõ ràng

Bất cứ khi nào bạn thay đổi giá trị của ẩn cuộc gọi đầu vào .change() để kích hoạt sự kiện này.

$(document).ready(function(){ 
    var $hello= $('[id$=myValue]'); 

    $hello.on("change", function(){ 
     alert('hey'); 
    }); 

    $hello.val("Something"); 
    $hello.change(); 
}); 

Chỉ cần gọi mã mà không xử lý

Thay vì sử dụng bộ xử lý sự kiện chỉ thực thi mã bạn sẽ có trong nguồn.

$(document).ready(function(){ 
    var $hello= $('[id$=myValue]'); 
    $hello.val("Something"); 
    alert('hey'); 
}); 

Một điều nữa tôi muốn đề cập là bộ chọn có thể được sắp xếp tốt hơn một chút.

var $hello= $('input[id$=myValue]'); 

Và nếu bạn sử dụng một phiên bản mới của jQuery thích on thay vì bind như trong ví dụ trên.

+0

@roasted Cảm ơn tôi đã xóa đoạn mã đó –

1

Nó là rất dễ dàng:

$('#my_id').val(myValue).trigger('change'); 

Sau đó, bạn có thể phát hiện giá trị thay đổi trên $ ('# my_id')