我正在尝试构建 Facebook 之类的链接共享预览。对于那些有视觉倾向的人,这样的事情:
一切都很好,但有一些小事情。链接共享预览是在相应的 textarea 中的 keyup 函数触发的。像这样的东西:
$('#txtPublish').keyup(function(e){
if ($(this).val() != '' && $(this).parent().find('.share-with').hasClass('active')) {
detectHyperlink(e,this);
}
else {
//do whatever
}
});
而对应的detectHyperlink开头是这样的:
function detectHyperlink(e,textarea)
{
if((e.which == 13 || e.which == 32 || e.which == 17) && ($(textarea).val().trim() != "")){
var hyperlink_post = $('#txtPublish').val(); // make dynamic
if(hyperlink_post != null) {
hyperlink_post = " " + hyperlink_post;
var urlRegex = /(https?\:\/\/|\s)[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})(\/+[a-z0-9_.\:\;-]*)*(\?[\&\%\|\+a-z0-9_=,\.\:\;-]*)?([\&\%\|\+&a-z0-9_=,\:\;\.-]*)([\!\#\/\&\%\|\+a-z0-9_=,\:\;\.-]*)}*/i;
if(urlRegex.test(hyperlink_post)){
// SImple DOM Manipulation
$.ajax({
type: "post",
url: '/controller/crawlHyperlink',
data: {message: hyperlink_post},
cache: false,
success: function(data) {
// 对于那些对这些东西感兴趣的人来说,数据是 JSON 格式的。
这工作正常,但问题是:detectHyperlink 方法不断被调用不止一次。也就是说,一旦 Textarea 检测到超链接并共享信息,它仍然会继续循环并向服务器发出 ajax 调用。因此,当我点击 Post 按钮时,它仍然会向服务器发出几次调用以检测超链接,然后才能实际发布此信息。
你们能看出原因吗?
谢谢