我正在尝试建立类似链接共享预览的Facebook。对于视觉倾向的人,这样的事情:
一切都很好,但对于一些小事情。链接共享预览是在相应的textarea 中的键盘功能上触发的。像这样:
$('#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 offcourse。
这样可以正常工作,但问题是:detectHyperlink方法不断被调用多次。也就是说,一旦Textarea检测到超链接并共享信息,它仍然会循环并对服务器进行ajax调用。因此,当我点击Post按钮时,它仍会向服务器发出一些调用,以便在实际发回此信息之前检测超链接。
你们可以找到原因吗?
谢谢
答案 0 :(得分:0)
如果使用jQuery覆盖默认超链接操作,则可能需要使用默认超链接操作。
$('#txtPublish').keyup(function(e){
if ($(this).val() != '' && $(this).parent().find('.share-with').hasClass('active')) {
detectHyperlink(e,this);
e.preventDefault();//prevents default submit() from firing
}
此外,您可能希望在调用ajax时设置临时标志,并在设置标志时阻止它再次执行。
if (ajaxWasCalled==false) {
$.ajax({
...
ajaxWasCalled=true;
});
}