jQuery使用.on()事件获取元素的哈希值
在我对手册的引用引起轰动之前,我已经研究了很长一段时间,并且不断陷入死胡同。 甚至不确定如何正确调试它。 因此,如果引用任何参考文献,请确保它们得到充分评论和指导。 这是由于我是一名PHP / mySQL开发人员,而JavaScript对象参考模型对我来说有点混乱(但绝对是我最好的学习!:))。
我正在尝试使用jQuery v1.7.2更新我对jQuery的了解。 显然,直播活动已被弃用,并已被.on()取代。 jQuery文档说不要使用.on()将旧的“click”或“live”事件与任何脚本混合在一起。
在尝试习惯使用时,我试图捕获给定URL的哈希值。
页面如下(标题已经加载了jquery.min.1.7.2.js):
$(document).on("click", "a.AJAXcaller", function(){ alert("Goodbye!"); alert($(this).attr("hash")); });
单击“添加事件”链接(具有哈希值)时会触发第一个警报,继续“再见!”,然后第二个处理程序触发并转发“未定义”。 我该如何访问这个哈希?
我的旧代码如下,并且它可以工作,但任何调用页面的ajax都不会附加事件处理程序,这就是我使用.on()事件的原因。 另外,如果我这次要学习如何正确地做这件事;),我不希望涉及已弃用的function……
旧代码(作品)
var linkClickAction = { 'a.AJAXcaller' : function(element){ element.onclick = function(){ var locationString = $(this).attr("hash"); locationString = locationString.replace(/.*\#(.*)/, "$1") var parameterString = locationString.replace(/.*\?(.*)/, "$1"); // onclick="sndReq('j=1&q=2&t=127.0.0.1&c=5'); var parameterTokens = parameterString.split("&"); // onclick="sndReq('j=1,q=2,t=127.0.0.1,c=5'); var parameterList = new Array(); for (j = 0; j < parameterTokens.length; j++) { var parameterName = parameterTokens[j].replace(/(.*)=.*/, "$1"); // j var parameterValue = parameterTokens[j].replace(/.*=(.*)/, "$1"); // 1 parameterList[parameterName] = parameterValue; } var page = parameterList['p']; var key = parameterList['k']; var includesDir = parameterList['i']; var changeDiv = parameterList['d']; sndReq(page,key,includesDir,changeDiv,parameterString); return false; } } }; Behaviour.register(linkClickAction);
还加载了一个基本上处理了侦听器的behaviour.js脚本。 当时我根本没有使用jQuery。 相对来说,这很好,而且很快(很小的.js文件,没有多余的代码),但是当我在ui中处理奇特的东西时,我达到了能够编写有效JavaScript的极限。 所以我必须在页面加载时加载jQuery脚本。 看看它是如何加载的,我正在尝试利用它的function,而不是为我的页面添加更多不必要的脚本来加载。 因此,我想找到一个使用本机jQuery 1.7.2函数来实现此目标的结果。
结果
事实certificate,当使用.attr()来查找DOM对象的属性时,jQuery 1.6+可能会中断。 所以使用.prop()是可行的方法。 更正后的代码如下:
/* Page: rating.js Created: Aug 2006 Last Mod: May 30, 2012 Modder: Darren Maurer */ function sndReq(page,key,includesDir,changeDiv,parameterString) { var divToChange = document.getElementById(changeDiv); // the Div that the data will be put into // switch Div with a loading div divToChange.innerHTML = ''; if (includesDir == 1){ //Find Current Working Directory. Use to find path to call other files from /*var myloc = window.location.href; var locarray = myloc.split("/"); delete locarray[(locarray.length-1)]; var arraytext = locarray.join("/"); */ $.ajax({ type: "POST", url: "AJAXCaller.php", data: parameterString, success: function(msg){ $('#'+changeDiv).html(msg); } }); } } /* =======END AJAX FUNCTIONS================= */ /* =======BEGIN CLICK LISTENER FUNCTIONS================= */ /* Listens to any a href link that has a class containing ' AJAXcaller' */ /* ie. > AJAX TEST LINK < */ $(document).on("click", "a.AJAXcaller", function(){ alert($(this).prop("hash")); var locationString = $(this).prop("hash"); locationString = locationString.replace(/.*\#(.*)/, "$1") var parameterString = locationString.replace(/.*\?(.*)/, "$1"); // onclick="sndReq('j=1&q=2&t=127.0.0.1&c=5'); var parameterTokens = parameterString.split("&"); // onclick="sndReq('j=1,q=2,t=127.0.0.1,c=5'); var parameterList = new Array(); for (j = 0; j < parameterTokens.length; j++) { var parameterName = parameterTokens[j].replace(/(.*)=.*/, "$1"); // j var parameterValue = parameterTokens[j].replace(/.*=(.*)/, "$1"); // 1 parameterList[parameterName] = parameterValue; } var page = parameterList['p']; var key = parameterList['k']; var includesDir = parameterList['i']; var changeDiv = parameterList['d']; sndReq(page,key,includesDir,changeDiv,parameterString); return false; });
希望能帮助别人,这绝对是我的救星!
您的元素没有哈希属性。 尝试获取href属性并使用javascript的substr和indexOf函数将字符串拆分为#
var href = $(this).attr("href"); var hash = href.substr(href.indexOf("#"));
你也可以使用
$(this).prop("hash");
$('a.js-hash').click(function() { // Store hash var hash = this.hash; // Using jQuery's animate() method to add smooth page scroll $('html, body').animate({ scrollTop: $(hash).offset().top }, 1000, function() { // Add hash (#) to URL when done scrolling (default click behavior) window.location.hash = hash; }); // Prevent default anchor click behavior return false; });