2009-11-21 40 views
8

Tôi gặp lỗi này trên sự kiện .click() trong jQuery. Tôi thấy nó trong Firebug. Tôi sử dụng phiên bản mới nhất, 1.3.2 (phút) Nhấp chuột kích hoạt yêu cầu $ .ajax() cho Biểu mẫu trong trang web của tôi. Tôi hỏi google về điều này và tất cả những gì anh ta biết là "%" hoặc "[@]" là các biểu thức không được công nhận, không có gì về "#".ngoại lệ không bắt buộc: Lỗi cú pháp, biểu thức không được công nhận: #

đây là một chút của mã của tôi:

$("form#buyForm #submitForm").live("click", function(e) { 
     var errors = 0; 

     var inputLastName_value = $("form#buyForm input#userLastName").val(); 
     if (inputLastName_value == "") { 
     errors = 1; 
     formErrorHandling("#userLastName"); 
     return false; 
     } 
     return false; 
    }); 

Bằng cách này tôi rà soát tất cả các đầu vào của tôi cho các lỗi, và sau đó gọi formErrorHandling() ai làm một số show/hide, những thứ như thế, không có gì quan trọng.

Tôi đọc rằng nó có thể là từ bộ chọn của tôi, nhưng tất cả dường như chỉ là tốt.

Có ai khác có cùng vấn đề không?

Cảm ơn.

+0

Có một lý do bạn đang làm tổ '# ids' trong bộ chọn của bạn? Id phần tử phải là duy nhất trên trang, do đó lồng chúng hoặc chỉ định chúng bằng 'form' hoặc' input' có vẻ hơi lạ. –

+2

Ý tôi là, tại sao lại sử dụng 'form # buyForm # submitForm' khi bạn chỉ có thể nói' # submitForm' vv –

+1

dcneiner, có, id nên là và duy nhất. Lý do tôi sử dụng tên thẻ trước khi chọn, ít nhất là từ những gì tôi đã đọc, là tốc độ. Vì vậy, jQuery sử dụng getElementByTagName và biết chính xác những gì để tìm kiếm, thay vì nhìn vào tất cả các id từ trang của tôi. – Adrian

Trả lời

8

Từ những gì tôi có thể thấy ngoại trừ dường như bằng cách nào đó kích hoạt bởi các jScrollPane Plugin bạn đang sử dụng.

Hãy thử thay thế tập lệnh bạn bao gồm (v1.2.3 cũ hơn từ tháng 12 năm 2008) bằng phiên bản mới hơn trực tiếp từ thân cây. Trong đó bao gồm nhiều cải tiến so với v.1.2.3 và sửa chữa các ngoại lệ đối với tôi jScrollPane.js (jScrollPane.min.js phiên bản rút gọn của R87 JScrollPane minified với YUICompressor)


loại bỏ cũ thứ câu trả lời không còn cần thiết

+0

jitter, tôi không biết nơi ngoại lệ xảy ra, thực tế thú vị là điều này chỉ xảy ra với một trong các biểu mẫu của tôi (tôi có hai biểu mẫu trên trang web của mình, cả hai đều sử dụng cùng một hàm formErrorHandling() và theo cùng một mẫu mã) đã đăng JS chứa phần xử lý biểu mẫu này tại đây: http://artdevmedia.net/gds/test.js lưu ý: chức năng chính bao gồm các biểu mẫu liên quan đến việc được gọi sau khi yêu cầu ajax thành công. – Adrian

+0

kiểm tra câu trả lời mở rộng: đặc biệt là phần về '$ (" # "+ id)' và 'phần tử: textarea' – jitter

+0

Xin chào jitter cảm ơn bạn đã dành thời gian. Tôi đã kiểm tra lặp đi lặp lại và tôi nghĩ rằng lỗi có thể không do các biểu mẫu của tôi hoặc do chức năng xử lý lỗi. Đó là một. Hai, nó không xảy ra mọi lúc. Dù sao, nếu bạn có thời gian, hãy xem ở đây: artdevmedia.net/gds - đây là những gì tôi tìm thấy: Nếu bạn nhấp vào "MUA ALBUM" và sau đó tiếp tục với biểu mẫu hoàn thành, v.v., không có ngoại lệ.Bây giờ, nhấp vào "VIDEO" và sau đó nhấp vào X để đóng video. Đôi khi đó là thời điểm khi ngoại lệ ném, thời gian khác, ngoại lệ ném sau khi đóng Video và quay lại MUA dạng ALBUM và gửi nó – Adrian

0

chức năng formErrorHandling trông như thế nào? Nó đang mong đợi một bộ chọn hoặc một đối tượng jQuery?

có lẽ những gì bạn cần là để gọi nó như

formErrorHandling($("#userLastName")); 
+0

hi Victor, hàm formErrorHandling trông giống như sau: function formErrorHandling (id, filter) {id = id.replace ("#", ""); ...} sau đó tôi thực hiện một chuyển đổi (id) và sau đó hiển thị thông báo lỗi đúng cho id đó. (và nếu nó có bộ lọc, hiển thị một thông điệp cụ thể) – Adrian

+0

Adrian, Nếu bạn đang loại bỏ "#", tại sao bạn bận tâm thiết lập nó khi bạn thực hiện chức năng? –

+0

Vâng, bạn nói đúng, tôi chỉ có thể gọi formErroHandling ("userLastName") mà không có #, và không loại bỏ nó trong chức năng. Tôi để nó ở đó, để theo dõi mã của tôi tốt hơn. Ít nhất, đối với tôi, điều đó có ích. – Adrian

1

Tháng Chín 2011

thay đổi từ

$(document).ready(function() { 
    $('#'+id).creatorCall({init:param}) ; 
}); 

để

$(document).ready(function() { 
    $(this).creatorCall({init:param}) ; 
}); 

và chữa khỏi mà tự cùng uncaught exception: Syntax error, unrecognized expression: # nhắn

0

Tôi biết đó là một vấn đề cũ và có phiên bản mới hơn JScrollPane nhưng như tôi cần phải sử dụng một trong hiện tại cho do vấn đề di sản ở đây là sửa chữa.Nếu bạn sẽ sử dụng jScrollPane.js từ câu trả lời ở trên, bạn cần phải thay đổi mã trong dòng 534:

thay đổi:

if (h && h.substr(0, 1) == '#' && h.length > 1) { 

để

if (h && h!='#' && h.substr(0, 1) == '#' && h.length > 1) { 

Tổng số các đoạn mã chịu trách nhiệm cho các nhấp chuột tài liệu với bản sửa lỗi:

$(document).bind('click', function(e){ 
    $target = $(e.target); 
    if ($target.is('a')) { 
     var h = $target.attr('href'); 
     if (h && h!='#' && h.substr(0, 1) == '#' && h.length > 1) { 
      setTimeout(function(){ 
       scrollTo(h, !settings.animateToInternalLinks); 
      }, $.browser.safari ? 100 : 0); 
     } 
    } 
}); 

Về cơ bản là scrollTo chức năng sẽ bị bỏ qua nếu liên kết của href bằng #

Cheers

G.

3

Trong một số id các trình duyệt có thể là rỗng và JQuery cuộn cảm trên "#" là một chọn.

+0

btw, tôi không chắc chắn những điều kiện gây ra lỗi thực tế, nhưng tôi đã chạy vào cùng một vấn đề với các plugin jqGrid. Mã plugin dường như làm cho jquery bị sặc chỉ ở khắp mọi nơi khi không có id trong thành phần được chuyển thành một jqGrid. Tôi giải quyết vấn đề bằng cách gán một bộ chọn ngẫu nhiên cho phần tử. table.attr ("id", "table" + Math.floor (Math.random() * 100000)); – Shanimal

0

Vấn đề đối với tôi dường như là do có quá nhiều # trong công cụ chọn.

Ví dụ:

$('##id_name') 

cần phải có được ...

$('#id_name') 
Các vấn đề liên quan