2011-09-05 36 views
5

Tôi có một hàm javascriptlàm thế nào để gọi javascript chức năng trên tải trang trong MVC3

function relativeTime(time) { 

var period = new Date(time); 
var delta = new Date() - period; 

if (delta <= 10000) { // Less than 10 seconds ago 
    return 'Just now'; 
} 

var units = null; 

var conversions = { 
    millisecond: 1,  // ms -> ms 
    second: 1000, // ms -> sec 
    minute: 60,   // sec -> min 
    hour: 60,  // min -> hour 
    day: 24,  // hour -> day 
    month: 30,  // day -> month (roughly) 
    year: 12   // month -> year 
}; 

for (var key in conversions) { 
    if (delta < conversions[key]) { 
     break; 
    } 
    else { 
     units = key; 
     delta = delta/conversions[key]; 
    } 
} 

// Pluralize if necessary: 

delta = Math.floor(delta); 
if (delta !== 1) { units += 's'; } 
return [delta, units, "ago"].join(' '); 

} 

rằng cho chênh lệch thời gian tương đối như facebook nhận xét.

Làm cách nào tôi có thể gọi hàm này trong chế độ xem của mình. Tôi đang sử dụng mvc3. tôi đang nhận được thời gian từ cơ sở dữ liệu như thế nào,

 <span> 
      @item.wallTimeStamp 
     </span> 

thay vì rằng tôi muốn gọi hàm javascript,

tôi có một thẻ

<span> 
    //call javascript function that will display time difference in this tag 
    </span> 

làm thế nào tôi có thể làm điều đó?

+7

Thưa ông, ông có 8 câu hỏi trong hồ sơ của bạn và bạn đã không được chấp nhận một đơn một trong số họ . Bạn dường như không thưởng cho những người khác giúp bạn :( –

+1

Đó không phải là chức năng jquery – jzm

Trả lời

4

Thứ nhất, cung cấp cho các id span (hay cái gì khác để xác định)

<span id="relativeTime"> 
</span> 

Sau đó, sử dụng javascript, đầu tiên tính toán rằng giá trị thời gian tương đối sử dụng của bạn chức năng. Sau đó, sử dụng jQuery.text(), thiết lập giá trị bên trong khoảng

<script> 

$(document).ready(function() { 
    var wallTimeStamp = '@item.wallTimeStamp'; 

    var relativeTimeValue = relativeTime(wallTimeStamp); 

    $('#relativeTime').text(relativeTimeValue); 
}); 

</scipt> 

sửa đổi Bộ luật có thể cần thiết cho nhiều nhịp của loại hình đó

+0

một cách logic nhưng không hoạt động. – Bhargav

+0

Lỗi là gì? Nếu có lỗi hoặc phân tích chuỗi @ item.wallTimeStamp là Ngày ở phía máy khách, bạn có thể cần phải đặt định dạng đúng cho nó. Đó là khi bạn :) – archil

+0

Không nhận được giá trị từ cơ sở dữ liệu trong var wallTimeStamp = '@ item.wallTimeStamp'; làm thế nào tôi có thể nhận được @ item.wallTimestamp giá trị trong chức năng? Có cách nào để có được điều này? – Bhargav

4
$(document).ready(function() { 
//called when the document is ready 
}); 
+0

bạn có thể giải thích điều này không? – Bhargav

+0

Bạn muốn thực thi hàm js khi tài liệu được tải - bạn có thể thực thi nó trong 'sẵn sàng (function() {..}) ' – Bozho

+0

Đây là cú pháp JQuery, Bhargav rõ ràng không sử dụng khung công tác JQuery. –

2
<body onload="javascript:relativeTime(time);"> 

nơi time là bất cứ điều gì bạn muốn nó được.

Nếu bạn muốn nó như là một điều thể nhấp cùng với một giá trị chỉ định từ mô hình của bạn, sau đó làm một cái gì đó giống như

<span onclick="relativeTime(@item.time)">@item.wallTimeStamp</span> 

chỉnh sửa:

ổn ..

giả sử thời gian của bạn trong hàm đến từ mô hình của bạn:

@HiddenFor(m => m.time) 

tạo tệp js riêng biệt và l mực nó trong doc html của bạn:

<script type="text/javascript" src="whatever.js"></script> 

bên trong nó (giả sử bạn có nghĩa là jquery):

$(function() { 
    relativeTime($("#time").val()); 
}); 
+1

ông đã nhận những gì ông yêu cầu. – jzm

3

Để chắc chắn rằng mã javascript của bạn chạy khi DOM đã nạp bạn phải sử dụng sẵn sàng() phương pháp. Hãy xem here để được giải thích. Bạn có thể sử dụng cũng ký hiệu shortahand này cho nó:

$(function() { 
    //put your code here 
}); 
Các vấn đề liên quan