2010-11-20 70 views
52

Vì vậy, tôi đang cố gắng tạo một chuỗi từ một chuỗi và một biến được truyền (là một số). Tôi làm như thế nào?Làm thế nào để nối một chuỗi với một biến?

Tôi có một cái gì đó như thế này:

function AddBorder(id){ 
    document.getElementById('horseThumb_'+id).className='hand positionLeft' 
} 

Vậy làm thế nào để tôi nhận được rằng 'horseThumb' và một id thành một chuỗi?

Tôi đã thử tất cả các tùy chọn khác nhau, tôi cũng googled và bên cạnh việc học rằng tôi có thể chèn biến trong chuỗi như thế này getElementById("horseThumb_{$id}") < - (không hoạt động cho tôi, tôi không biết tại sao) . Vì vậy, bất kỳ trợ giúp sẽ được đánh giá rất cao.

+8

Chỉ là cách bạn đã thực hiện. Nhưng nếu bạn muốn rõ ràng, bạn có thể thay đổi 'id' thành' id.toString() '. –

+4

Có, bạn đã thực hiện nó một cách chính xác. Nếu nó "không hoạt động", thì cái gì khác là sai, giống như không thực sự là một phần tử với ID đó. –

+1

Mã này: 'getElementById (" horseThumb _ {$ id} ")' không phải là JavaScript, nó là PHP. Vì vậy, đó là lý do tại sao nó không làm việc cho bạn. – Domenic

Trả lời

38

Mã của bạn là đúng. Có lẽ vấn đề của bạn là bạn không chuyển ID tới hàm AddBorder hoặc một phần tử có ID đó không tồn tại. Hoặc bạn có thể đang chạy hàm của mình trước khi phần tử được đề cập có thể truy cập thông qua DOM của trình duyệt.

Để xác định các trường hợp đầu tiên hoặc xác định nguyên nhân của vụ án thứ hai, thêm các như các dòng đầu tiên bên trong hàm:

alert('ID number: ' + id); 
alert('Return value of gEBI: ' + document.getElementById('horseThumb_' + id)); 

Điều đó sẽ mở cửa sổ pop-up cửa sổ mỗi khi hàm được gọi, với giá trị của id và giá trị trả lại là document.getElementById. Nếu bạn nhận được undefined cho cửa sổ bật lên số ID, bạn không chuyển đối số cho hàm. Nếu ID không tồn tại, bạn sẽ nhận được số ID (không đúng?) Trong cửa sổ bật lên đầu tiên nhưng nhận được null trong lần thứ hai.

Trường hợp thứ ba sẽ xảy ra nếu trang web của bạn trông như thế này, cố gắng chạy AddBorder khi trang vẫn tải:

<head> 
<title>My Web Page</title> 
<script> 
    function AddBorder(id) { 
     ... 
    } 
    AddBorder(42); // Won't work; the page hasn't completely loaded yet! 
</script> 
</head> 

Để sửa lỗi này, hãy đặt tất cả các mã có sử dụng AddBorder bên trong một sự kiện onload handler:

// Can only have one of these per page 
window.onload = function() { 
    ... 
    AddBorder(42); 
    ... 
} 

// Or can have any number of these on a page 
function doWhatever() { 
    ... 
    AddBorder(42); 
    ... 
} 

if(window.addEventListener) window.addEventListener('load', doWhatever, false); 
else window.attachEvent('onload', doWhatever); 
+0

Nó sẽ không hoạt động đối với một số Công cụ JavaScript được nhúng - chẳng hạn như [mJS ] (https://mongoose-os.com/blog/mjs-a-new-approach-to-embedded-scripting/) - sẽ dẫn đến lỗi như 'lỗi gọi lại MJS: chuyển đổi loại ngầm định bị cấm'. Đối với trường hợp đó, yêu cầu sử dụng chuyển đổi loại rõ ràng – N0dGrand87

1

Giống như bạn đã làm. Và tôi sẽ cung cấp cho bạn một mẹo nhỏ cho những điều ngớ ngẩn này: chỉ cần sử dụng hộp url trình duyệt để thử cú pháp js. ví dụ: viết: javascript:alert("test"+5) và bạn có câu trả lời. Sự cố trong mã của bạn có thể là phần tử này không tồn tại trong tài liệu của bạn ... có thể là bên trong một biểu mẫu hoặc một thứ gì đó. Bạn cũng có thể kiểm tra điều này bằng cách viết vào url: javascript:alert(document.horseThumb_5) để kiểm tra lỗi của bạn ở đâu.

19

Trong javascript toán tử "+" được sử dụng để thêm số hoặc nối các chuỗi. nếu một trong các toán hạng là một chuỗi "+" nối, và nếu nó chỉ là số, nó sẽ thêm chúng.

dụ:

1+2+3 == 6 
"1"+2+3 == "123" 
+4

Và chỉ để cho vui là kết quả của: '2 +" 3 "- 5' là gì? (không gian lận) –

+0

@pst Có phải NaN không? –

+0

@pst Hehe, câu hỏi hay. –

4

Điều này có thể xảy ra vì tập lệnh java cho phép khoảng trắng đôi khi chuỗi được nối với một số. hãy thử loại bỏ các khoảng trắng và tạo một chuỗi và sau đó chuyển nó vào getElementById.

dụ:

var str = 'horseThumb_'+id; 

str = str.replace(/^\s+|\s+$/g,""); 

function AddBorder(id){ 

    document.getElementById(str).className='hand positionLeft' 

} 
0

Một cách khác để làm điều đó đơn giản sử dụng jquery.

mẫu:

function add(product_id){ 

    // the code to add the product 
    //updating the div, here I just change the text inside the div. 
    //You can do anything with jquery, like change style, border etc. 
    $("#added_"+product_id).html('the product was added to list'); 

} 

đâu product_id là var javascript và $ ("# thêm _" + product_id) là một id div nối với product_id, var từ chức năng add.

Trân trọng!

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