2013-05-24 28 views
5

Điều này thực sự khiến tôi khó hiểu. Tôi có hàm được định nghĩa trong tệp main.js, được tải trong tiêu đề và sau đó tôi gọi hàm đó ở cuối mã HTML. Trong Chrome tôi gặp lỗi Tham chiếu không bắt buộcLỗi: delete_image không được xác định, nhưng trong Firefox, nó hoạt động bình thường (cùng một lỗi xuất hiện trong Opera). Chuyện gì vậy?Jquery 1.9, JS - chức năng không được xác định trong Chrome

Chức năng:

function delete_image(button, data = false){ 
    button.on('click', function(){ 
    var $this = $(this), 
    url = $(this).attr('href'); 

    if(data == 'tmp') 
    { 
     data = 'id=' + $this.data('id'); 
    } 
    else if (data == true) 
    { 
     data = forma.serialize(); 
    } 

    $.confirm({ 
     'title'  : 'Image Delete', 
     'message' : 'Do you want to delete this image?', 
     'buttons' : { 
      'Yes' : { 
       'class' : 'blue', 
       'action': function(){ 
        $.post(url, data, function(){ 
         $this.parent().slideUp('slow'); 
        }); 
       } 
      }, 
      'No' : { 
       'class' : 'gray', 
       'action': function(){} 
      } 
     } 
    }); 
    return false; 
    }); 
}; 

Gọi function (sau HTML một phần của mã):

<script> 
    var link = $('a[role=delete]'); 
    delete_image(link); 
</script> 
+0

Ngoài ra, có vẻ như bạn đang sử dụng 'dữ liệu' để đại diện cho một vài loại khác nhau. bạn nên cố gắng sử dụng nó như một loại duy nhất. Ngoài ra, nó không phải là một tên biến lớn, và bạn đang mất quyền truy cập vào nó bên trong hàm 'confirm' của bạn. Cố gắng tìm ra cái tên thể hiện rõ hơn những gì bạn đang sử dụng biến đó. –

Trả lời

10

Bạn không thể vượt qua một giá trị tham số mặc định trong tiêu chuẩn ngày nay javascript, đây là không hợp lệ trong Chrome:

function delete_image(button, data = false){ 

Điều bạn nên làm là

function delete_image(button, data){ 
    if (data == undefined) data=false; 

MDN precises in what browsers you can use this feature (trả lời: chỉ Firefox).

Điều này sẽ khả dụng với Harmony. Đây là .

+3

đúng ... nhưng nó sẽ có sẵn trong EcmaScript 6 mặc dù –

+0

Tôi không biết điều đó. Nhưng làm thế nào nó hoạt động trong Firefox? – Sasha

+0

@Sasha họ đang thử nghiệm rất nhiều thứ trước khi họ nhận được chính thức trong ES, và đôi khi họ không bao giờ có được chủ đạo. Một ví dụ khác: [Iterators] (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Iterators_and_Generators). –

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