2013-01-31 42 views
8

mà tôi có một hình thức như sau:jquery phát hiện nút gửi dưới dạng

<form id="my-form" ...> 
    ... 
    <button type="submit" name="bttnsubmit" value="1">The first button</button> 
    <button type="submit" name="bttnsubmit" value="2">The last button</button> 
</form> 

Tôi muốn phát hiện đã kích hoạt các hình thức nộp kiện sử dụng chỉ:

$('#my-form').submit(function(){ 
    //psuedo code 
    if($('[name=bttnsubmit]').val() == 1) { 
     .... 
    } 
}); 

Rõ ràng selector đó sẽ luôn trả về giá trị của phần tử bttnsubmit đầu tiên mà nó xuất hiện, vì vậy tôi cần một số bộ chọn hoặc bộ lọc ma thuật khác hoặc một cái gì đó.

Tôi đã thấy $('[name=bttnsubmit][clicked=true]') chào hàng về nhưng điều đó vẫn chưa làm việc trong những nỗ lực của tôi ...

tôi có thể nghỉ dưỡng khóa học để $('[name=bttnsubmit]').click() nhưng muốn để có thể đạt được mục tiêu của tôi trong các hình thức nộp sự kiện.

Bất kỳ trợ giúp/mẹo nào được đánh giá cao.

Trả lời

12

Tôi không biết nếu có bất kỳ dữ liệu sự kiện được tích hợp nào (có thể có) nhưng một ý tưởng mà bạn cần lưu ý là xử lý sự kiện nhấp của các nút và lưu trữ tham chiếu toàn cục về giá trị. Một cái gì đó như thế này:

var ButtonValue; 

$('button[type="submit"]').click(function(e){ 
    ButtonValue = $(this).val(); 
}); 

$('#my-form').submit(function(){ 
    //psuedo code 
    if(ButtonValue == 1) 
    { 
     .... 
    } 
}); 
+0

điều đó sẽ làm tôi. thanx –

0

Về tuyên bố của bạn:

Tôi đã thấy $ ('[name = bttnsubmit] [nhấp = true]') chào hàng về nhưng điều đó vẫn chưa làm việc trong những nỗ lực của tôi ...

Tôi thấy điều này không được giải thích chính xác ở nơi khác. Nó không phải là một điều tự động. Bạn vẫn cần thiết lập nó bằng cách thêm thuộc tính "được nhấp" bất kỳ khi nào nút gửi được nhấp.

$("#my-form input[type=submit]").click(function() { 
    $("input[type=submit]", $(this).parents("form")).removeAttr("clicked"); 
    $(this).attr("clicked", "true"); 
}); 
$("#my-form").submit(function() { 
    var clickedSubmitValue = $("input[type=submit][clicked=true]").val(); 
    if (clickedSubmitValue == "1") 
    { 
     ... 
    } 
}); 

Tương tự ví dụ here.

+0

Đây cũng là tài liệu ở đây quá: http://stackoverflow.com/a/5721762/277303 –

5

Câu trả lời này là sự cải thiện câu trả lời của @ musefan.

Tránh biến toàn cục. Nó là tốt hơn để giữ cho dữ liệu ở dạng:

$('button[type=submit]').click(function (e) { 
    var button = $(this); 
    buttonForm = button.closest('form'); 
    buttonForm.data('submittedBy', button); 
}); 

Và trong trình xử lý chỉ có được nó:

$('#my-form').submit(function (e) { 
    var form = $(this); 
    var submittedBy = form.data('submittedBy'); 
    if(submittedBy.val() == 1) { 
     // Any code here... 
    } 
}); 

Mẫu có thể được gửi bằng cách nhấn 'nhập'. Để tránh null trong submittedBy biến:

var submittedBy = form.data('submittedBy') || form.find('button[type=submit]:first'); 
+0

Hm, điều này không thực sự có vẻ làm việc cho tôi. Trình xử lý nút 'click' đang bị bỏ qua có lợi cho trình xử lý biểu mẫu 'submit'. –

+0

* facepalm * disregard^Đó là vì tôi đang sử dụng một số không phải là

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