2009-06-08 27 views
7

Tôi đang cố gắng tìm ra lý do tại sao JavaScript này không chỉ dừng lại dưới dạng bị nộp:Form vẫn nộp mặc dù chức năng nghe trả về false

<form action="http://www.example.com" id="form"> 
    <input type="text" /> 
    <input type="submit" /> 
</form> 

<script> 
var code = function() { 
    return false; 
}; 
var element = window.document.getElementById("form"); 
if (element.addEventListener) { 
    element.addEventListener("submit", code, false); 
} 
</script> 

Trừ khi tôi thêm các thuộc tính onsubmit sau mẫu phần tử:

<form action="http://www.example.com" id="form" onsubmit="return false"> 
    <input type="text" /> 
    <input type="submit" /> 
</form> 

<script> 
var code = function() { 
    return false; 
}; 
var element = window.document.getElementById("form"); 
if (element.addEventListener) { 
    element.addEventListener("submit", code, false); 
} 
</script> 

Có vẻ như phương pháp addEventListener chỉ nên thực hiện thủ thuật. Có suy nghĩ gì không? Tôi đang ở trên máy Mac và tôi đang trải qua kết quả tương tự trên Safari, Firefox và Opera. Cảm ơn.

+0

thể trùng lặp của [trả về false trên addEventListener nộp vẫn nộp form?] (http://stackoverflow.com/questions/4924036/return-false-on-addeventlistener-submit-still-submits-the-form) – unor

Trả lời

8

Kết hợp các thông tin từ hai câu trả lời rất hữu ích vào một giải pháp mà hoạt động trên cả Mac và PC:

<script> 
var code = function (eventObject) { 
    if (eventObject.preventDefault) { 
     eventObject.preventDefault(); 
    } else if (window.event) /* for ie */ { 
     window.event.returnValue = false; 
    } 
    return true; 
}; 
var element = window.document.getElementById("form"); 
if (element.addEventListener) { 
    element.addEventListener("submit", code, false); 
} else if (element.attachEvent) { 
    element.attachEvent("onsubmit", code); 
} 
</script> 
6

Hình như nếu bạn thay đổi chức năng của bạn để

var code = function(e) { 
    e.preventDefault(); 
} 

Nó nên làm những gì bạn đang tìm kiếm.

source

2

Tôi nghĩ rằng những gì bạn đang tìm kiếm là phương pháp preventDefault() của giao diện Event cho các trình duyệt mà thực hiện nó. Nó sẽ hủy gửi biểu mẫu theo cách bạn mong đợi "return false" tới.

Thêm herehere.

<script type="text/javascript"> 
var code = function (evt) { 
      if (evt.preventDefault) { 
       evt.preventDefault(); 
      } 
      return false; 
}; 
window.onload = function() { 
    var element = window.document.getElementById("form"); 
    if (element.addEventListener) { 
     element.addEventListener("submit", code, false); 
    } 
}; 
</script> 
Các vấn đề liên quan