2014-10-08 73 views
0

我很努力弄清楚如何在jQuery中调用/执行函数。我已经做了相当多的搜索,并找到它看起来像应该是答案,但它似乎并没有工作。我认为这是一个范围问题,因为所有其他东西似乎与我在这里找到的示例相匹配,但是我对jQuery相对较新,并且无法完全弄清楚。执行存储为变量名称的jquery函数

基本上,当单击“书签”按钮时,它使用ajax在数据库中创建一个条目,并更改单击按钮的格式。这按预期行事。诀窍是这需要有人登录。实际点击该按钮会为url添加一个#bookmarkme锚点 - 如果它们没有登录(这是事情开始变得棘手的地方),登录窗口会弹出并提示他们注册/登录,并重新加载页面以正确设置所有登录变量。这也按预期工作。它发生故障的地方是用户登录并重新加载页面后,我无法运行“bookmarkFunction”。

<script type="text/javascript"> 
var loggedin = <?php echo $loggedin; ?>; 

var headerButtonScript = function(){ 
    var bookmarkFunction = $("#bookmark").click(function(){ 
    var directoryName = "<?php echo $directoryName;?>"; 
    if(loggedin == 1 && $("#bookmark").hasClass("headerButton")){ 
    $.ajax({ 
    type: "POST", 
    url: "../includes/bookmarkProcess.php", 
    data: {directory: directoryName}, 
    success: function(data, status){ 
     if(data == "success"){ 
     $("#bookmark").switchClass("headerButton", "headerButtonDisabled", 1000, "easeInOutQuart"); 
     $("#bookmark").text("Bookmarked"); 
     } 
    } 
    }); 
    } 
    else{ 
    $("#signInContent").toggleClass('hidden'); 
    $("#signInPopUp").toggleClass('hidden'); 
    } 
    }); 
}; 

var headerButtonsAfterLoad = function(){ 
    var currentAddress = window.location.href; 
    var hashPosition = currentAddress.indexOf("#"); 
    var targetLocation = currentAddress.substring(hashPosition+1); 

    if(targetLocation == "bookmarkme"){ 
    if(loggedin==1){ 
    //CALL bookmarkFunction HERE; 
    //I know I get to this location when expected, because placing an alert("message") gives me the pop up 
    } 
    } 
}; 

$(document).ready(headerButtonScript); 
$(window).bind('load',"",headerButtonsAfterLoad); 
</script> 

根据我的研究,我曾尝试以下行(一行每次而不是所有企图,当然一次)的摘录,试图调用功能,但还没有运气。

if(targetLocation == "bookmarkme"){ 
    if(loggedin==1){ 
    //CALL bookmarkFunction HERE; 
    bookmarkFunction(); 
    bookmarkFunction.run(); 
    bookmarkFunction.call(); 
    bookmarkFunction.apply(); 
    } 
    } 

任何帮助找到我的问题 - 范围,方法,否则 - 非常感谢!

+1

我不知道为什么你正在这么复杂.. 'bookmarkFunction'不是函数...这是一个jQuery对象... – 2014-10-08 04:03:04

+1

'bookmarkFunction。点击()' – epascarello 2014-10-08 04:03:42

+0

@epascarello - 当页面重新加载时,我需要脚本采取与点击书签按钮(ID =书签)时相同的操作,并在单击ID时具有锚点#bookmarkme。点击触发很容易,但如果锚点存在,我无法触发重新加载。 (#) – redstang423 2014-10-08 04:09:27

回答

2

“我需要脚本以它会同样的动作,当我点击书签按钮(ID =书签)页面重新加载时,有锚#bookmarkme”

这将做你想做的^

$('#bookmarkme').trigger('click'); 
+1

谢谢,正如我想的那样工作,将ID稍作修改为#bookmark - 我只是使用锚书签,它不引用任何元素,所以它不会自动滚动到任何地方。我感谢帮助! – redstang423 2014-10-08 04:17:51

+0

欢迎您,很高兴它帮助。 – 2014-10-08 04:20:08

0

$("#bookmark").click()。应该管用。请记住,在jQuery对象上调用jQuery方法会返回原始的jQuery对象。所以,如果你说:

var bookmark=$('#bookmark') 

然后书签设置为jQuery对象(其中包含ID =书签作为属性的元素)。

如果连接方法的目标是这样的:

var bookmark=$('#bookmark').click(function(){console.log('You clicked!')}) 

然后,是的,id为书签的元素现在当你点击它调用此事件,而是一个jQuery对象上的click方法返回原来的jquery对象。这意味着书签仍然等于$("#bookmark"),而不是click方法中的功能。

所以在最后,当您将事件到jQuery对象,像点击或悬停,它进入DOM和附加的情况下,再返回原来的jQuery对象。这样,你可以做这样的事情:

var bookmark=$("#bookmark").click(function(){console.log("you clicked")}).mouseover(function(){console.log("you moused over")}) 

而且你可以保持永远永远连接事件,并bookmark将永远等于$("#bookmark")

相关问题