我正在努力弄清楚如何在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();
}
}
非常感谢任何有关查找我的问题的帮助 - 范围,方法或其他方法!
答案 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")