2011-11-10 31 views
13

Tôi đã sauJavascript - confirm() bên trong một hàm jquery .click()

$("element").click(function() { 
    var foo=bar; 
    if (foo == "bar") { 
    confirm('Dialogue'); 
    } 
}); 

Nhưng tôi muốn bool chức năng xác nhận. Tôi đã thử

$("element").click(function() { 
    var foo=bar; 
    if (foo == "bar") { 
    var confirm=confirm('Dialogue'); 
    if (confirm==true) { 
     alert('true'); 
    } else { 
     alert('false'); 
    } 
    } 
}); 

Nhưng không có hộp xác nhận nào được tạo. Làm thế nào tôi có thể thực hiện điều này?

+0

'(xác nhận = true)' phải là '(xác nhận == đúng)' hoặc '(xác nhận)' cũng là thanh gì trong ngữ cảnh này 'var foo = bar' –

Trả lời

20

Bạn có một vài vấn đề. Vấn đề đầu tiên là bạn đang định nghĩa một biến với tên confirm. Không tốt! Đổi tên thành isGood hoặc thứ gì đó khác.

Các lỗi khác là ngay tại đây:

if (confirm=true) { 

confirm=true là chuyển nhượng, không phải là một sự so sánh.

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

if (confirm==true) { 

hoặc chỉ

if (confirm) { 

Vì vậy, mã của bạn sẽ là một cái gì đó giống như

var bar = "bar"; 
$("button").click(function() { 
    var foo=bar; 
    if (foo == "bar") { 
    var isGood=confirm('Dialogue'); 
    if (isGood) { 
     alert('true'); 
    } else { 
     alert('false'); 
    } 
    } 
}); 
+0

ngu ngốc tôi và lỗi gõ noobie của tôi. Đó là vì tôi đã xác nhận = true thay vì xác nhận == true. =/ – Mechaflash

1

thử

if (confirm) { 
     alert('true'); 
    } else { 
     alert('false'); 
    } 
0

Mặc dù ban đầu của tôi là vấn đề chính của bạn nằm ở đây

var foo=bar; 
    if (foo == "bar") { 

thanh là gì? Tôi tin rằng bạn dự định thực hiện bài tập sau đây var foo="bar"; sẽ làm cho câu lệnh if đánh giá là đúng và thực thi hộp thoại xác nhận của bạn.

Bên cạnh sau đây là không chính xác

var confirm = confirm("dialog"); 
if (confirm=true) 

chỉ cần sử dụng này:

if (confirm("dialog")) 
+0

heh? khi thực hiện một chuỗi var ==, chuỗi luôn luôn được bao quanh bởi dấu ngoặc kép (hoặc đơn hoặc đôi tùy thuộc vào cách sử dụng) hoặc người nào khác nó được đánh giá như một biến thay vì một chuỗi. Vì vậy, không, nó sẽ không được viết như foo = "bar". Nhưng phần thứ hai của bạn là sự thật. -1 +1 – Mechaflash

5

Tất cả các ý kiến ​​về sự so sánh đều đúng, tuy nhiên, lý do hộp thoại xác nhận không hiển thị là bạn đang xóa đối tượng hộp xác nhận.

Thay đổi tên của confirm var.

$(element).click(function() { 
    var confirm1 = confirm('Dialogue'); 
    if (confirm1) { 
    alert('true'); 
    } else { 
    alert('false'); 
    } 
}); 

http://jsfiddle.net/xjGZj/

Hãy so sánh rằng với trang này mà không hoạt động.

$(element).click(function() { 
    var confirm = confirm('Dialogue'); 
    if (confirm) { 
    alert('true'); 
    } else { 
    alert('false'); 
    } 
}); 

5

Khi bạn khai báo một biến bất cứ nơi nào trong chức năng của bạn, nó sẽ tự động được "kéo" lên đỉnh như là một biến địa phương. Khi bạn gọi xác nhận là một hàm, nó sẽ tìm biến cục bộ đầu tiên (chưa được xác định) và không đi lên chuỗi phạm vi đến window nơi hàm này hoạt động.

$("element").click(function() { 
    var foo=bar; 
    if (foo == "bar") { 
    var confirm=confirm('Dialogue'); 
    if (confirm==true) { 
     alert('true'); 
    } else { 
     alert('false'); 
    } 
    } 
}); 

cũng giống như

$("element").click(function() { 
    var foo=bar, confirm = undefined; 
    if (foo == "bar") { 
    confirm=confirm('Dialogue'); 
    ... 
}); 

Bạn có thể 1) đổi tên biến của bạn, 2) gọi window.confirm("Dialog") nói nó, bạn muốn các chức năng toàn cầu thay vì các biến địa phương hoặc 3) chỉ cần đặt cuộc gọi xác nhận bên trong một nếu

$("element").click(function() { 
    var foo=bar; 
    if (foo == "bar") { 
    if (confirm('Dialogue')) { 
     alert('true'); 
    } else { 
     alert('false'); 
    } 
    } 
}); 
10
if(!confirm('Are you sure you want to continue?')) { 
        return false; 
    } 
0

Thêm .confirm lớp để một yếu tố t hen trong jQuery viết ..

$('.confirm').click(function() { 

    return confirm("Are you sure?"); 

}); 
Các vấn đề liên quan