执行存储为变量名的jquery函数

时间:2014-10-08 04:00:40

标签: javascript php jquery

我正在努力弄清楚如何在jQuery中调用/执行函数。我已经完成了相当多的搜索并找到了它应该应该的答案,但它似乎不起作用。我认为这是一个范围问题,因为其他一切似乎都与我在这里找到的例子匹配,但我对jQuery相对较新,并且无法弄明白。

基本上,当单击“书签”按钮时,它使用ajax在数据库中创建条目,并更改单击按钮的格式。这符合预期。诀窍是这需要有人登录。实际点击按钮会在网址上添加一个#bookmarkme锚点 - 如果他们没有登录(这就是我开始变得棘手的地方),登录窗口会弹出up并提示他们注册/登录,页面重新加载以正确设置所有登录变量。这也按预期工作。它崩溃的地方是用户登录并重新加载页面后,我无法运行“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();
   }
  }

非常感谢任何有关查找我的问题的帮助 - 范围,方法或其他方法!

2 个答案:

答案 0 :(得分:2)

“当页面重新加载并具有锚点#bookmarkme”时,我需要脚本执行与单击书签按钮(ID =书签)时相同的操作

这将做你想要的^

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

答案 1 :(得分:0)

$("#bookmark").click()。应该管用。

请记住,在jQuery对象上调用jQuery方法会返回原始jQuery对象。所以如果你说:

var bookmark=$('#bookmark')

然后将bookmark设置为jQuery对象(其中包含id = bookmark作为属性的元素)。

如果您将方法附加到对象:

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")