2010-08-21 16 views

Trả lời

5

Sự kiện "gửi" không được kích hoạt bởi nút nhưng được kích hoạt bởi "biểu mẫu". Xét nghiệm nhanh chóng chứng minh điều này:

<form id="myform"> 
    <input id="email" type="text" value="1st Email" /> 
    <input id="action1" type="submit" value="Action 1" /> 
    <input id="action2" type="submit" value="Action 2" /> 
    </form> 

    <script type="text/javascript"> 

    document.getElementById("myform").onsubmit = function(evt) { 
     var event = evt || window.event; 
     alert(event.target.id); // myform 
     alert(event.explicitOriginalTarget.id); // action2 (if action2 was clicked) 
               // but only works in firefox! 
    } 

    </script> 

Mặc dù trong firefox, bạn có thể sử dụng event.explicitOriginalTarget tài sản trên sự kiện để có được đầu vào (nộp) mà được nhấp gây ra sự kiện trình bị sa thải. (Nếu bạn muốn biết)

Vì vậy, lựa chọn tốt nhất cho bạn là:

  • Có một giá trị khác nhau để trình các nút của bạn HOẶC
  • Có những người như các nút bình thường và nhấp xử lý đối với họ thông qua javascript.
+0

Cảm ơn. Tôi nghĩ về những người xử lý onclick. Dường như không có cách nào sạch sẽ (ít nhất là không có trình duyệt chéo) – GetFree

+0

Tôi thực sự ngạc nhiên khi chức năng này có sẵn, nhưng sau khi gặp câu hỏi này (và một số câu hỏi tương tự), có vẻ như nó không đơn giản. Què. – MandM

1

Có một vài cách mà tôi có thể nghĩ đến.

Bạn có thể sử dụng các giá trị khác nhau và javascript không phô trương của bạn có thể trợ giúp.

Một cuộc thảo luận về phương pháp này (sử dụng giá trị khác nhau đối với từng nút) là ở đây:

http://www.chami.com/tips/internet/042599I.html

Tôi có xu hướng đi bằng cách sử dụng khác nhau name thuộc tính cho mỗi nút.

Một blog trên đó là ở đây: http://www.codetoad.com/javascript/multiple.asp

Tôi không làm theo một trong hai trong số này, mà cách tiếp cận sẽ làm việc tốt nhất sẽ phụ thuộc vào các yếu tố khác nhau, chẳng hạn như, bạn có xử lý nộp các nút trong javascript, hoặc máy chủ sẽ nhận được biểu mẫu, sau đó phải tìm ra những gì người dùng muốn.

Cá nhân, tôi thích sử dụng phương pháp ajax, bây giờ, nơi tôi chỉ đính kèm sự kiện vào các nút sau khi tải trang, sử dụng javascript không phô trương và sau đó dựa trên sự lựa chọn của người dùng gọi đúng chức năng, nhưng phụ thuộc vào việc bạn có thể thêm liên kết tập lệnh vào trang html hay không.

UPDATE:

Để làm điều này với javascript, cách đơn giản nhất là để đính kèm một sự kiện trên các bấm vào nút, và sau đó nhìn vào tên để quyết định làm thế nào để xử lý nó.

Trong thực tế, biểu mẫu không bao giờ thực sự được gửi tới máy chủ, nhưng bạn có thể xử lý mọi thứ trong nền bằng cách gói các tham số (tùy chọn) và gửi chúng đến máy chủ và cho người dùng biết kết quả.

+0

Có, các tên khác nhau là cách để đi. Căn cứ vào việc kiểm tra các giá trị là sai về mặt khái niệm vì các giá trị đó là một phần của GUI. – GetFree

1

Có trình xử lý sự kiện trên mỗi nút được tính là thêm mã không? Nếu không, không có cách nào để xem nút nào đã kích hoạt sự kiện gửi, trừ khi bạn muốn xuống và bẩn và tính toán vị trí chuột trong sự kiện và so sánh nó với vị trí nút.

Nếu không, điều tốt nhất tiếp theo sẽ là chỉ định trình xử lý sự kiện cho sự kiện nhấp chuột và gán tên nút đó cho biến mà bạn có thể kiểm tra trong sự kiện gửi biểu mẫu.

+1

Tôi sợ điều đó. Xấu hổ làm sao. – GetFree

1

Xin lỗi vì đã làm nóng chủ đề rất cũ này. Câu hỏi chưa được trả lời ở đây, nhưng chỉ có cách tiếp cận cho cách giải quyết thực tế đã được đưa ra ở đây trước đây.

Nhưng đối tượng sự kiện không mang thông tin về đối tượng nào đã khởi tạo đối tượng đó. Trong một handler b4submit (e) bạn có thể có được những nút gửi như thế này:

function b4submit(e) { 
    var but = e.originalEvent.explicitOriginalTarget; 
    ... 
} 

Và nhưng là một đối tượng HTML với tất cả các thuộc tính bạn đã gán nó với, như tên, id, giá trị vv

Tôi đã xem xét vấn đề này sau khi gỡ lỗi và tôi nghĩ rằng đó có thể là mối quan tâm rộng hơn như một giải pháp sạch cho vấn đề này.

+0

Câu trả lời được chấp nhận đã đề cập đến 'explicitOriginalTarget'. Đó là một đặc tính của mozilla. – GetFree