Javascript:插入变量作为参数

标签 javascript html

我正在考虑将“NodeNumber”变量放入我的 loadSynchPage 函数的参数中。

我的代码查看页面的名称(例如来自 http://www.example.com/tree/page.htm 的 page.htm ),并在一系列行之后给出“NodeNumber”。我希望页面计算出 NodeNumber 并在页面加载时将其放入函数中。 所以我猜它看起来像这样:

<BODY onload="loadSynchPage(NodeNumber);">

我已经得到了使用 onlick 按钮输出 NodeNumber 的代码。 我还获得了 loadSynchPage(linkID) 函数,可以使用带有 onclick 的按钮来工作,我自己在其中输入数字。按钮,还有一个我预定义的变量;但我无法让它读取我的“NodeNumber”,我花了 2 天试图解决这个问题。

这是我的代码:

<script>
function variables() {
//Getting the page's name from the URL
PageName = location.pathname.split("/").slice(-1);
document.getElementById("PageName").innerHTML = PageName;

//Converting the page name into a string
PageNameString = String(PageName);
document.getElementById("PageNameString").innerHTML = PageNameString;

//Converting the string of the page name, into it's length
PageLength = PageNameString.length;
document.getElementById("PageLength").innerHTML = PageLength;

//Setting the DemoFramesetNodes.js as a variable (Copy and Paste in - needs to have no " and be on one line)
TextFromDemoFramesetNodesJS = "foldersTree = gFld(<i>Page 1 Title</i>, page1.htm)//000foldersTree.treeID = Framesetaux1 = insFld(foldersTree, gFld(Page 2 Title, page 2.htm)) //001insDoc(aux1, gLnk(R, Page 3 Title, Page3.htm)) //002aux1 = insFld(foldersTree, gFld(Page 4 Title, Page4.htm)) //003insDoc(aux1, gLnk(R, Page 5 Title, Page5.htm)) //004";
//Need to set the difference BETWEEN the "m" in htm and the start of the number
//e.g. page2.htm)) //001
CharacterDifference = "5";
document.getElementById("CharacterDifference").innerHTML = CharacterDifference;

//Need to find the location of the page's name from the DemoFramsetNodes
PageNameLocation = TextFromDemoFramesetNodesJS.lastIndexOf(PageNameString);
document.getElementById("PageNameLocation").innerHTML = PageNameLocation;

//Need to convert all variables to be added into numbers
PageNameLocationNumber = Number(PageNameLocation);
PageLengthNumber = Number(PageLength);
CharacterDifferenceNumber = Number(CharacterDifference);
document.getElementById("CharacterDifferenceNumber").innerHTML = CharacterDifferenceNumber;

//Add the variables to give us the start location of the Node Number
NodeNumberStart = PageNameLocationNumber + PageLengthNumber + CharacterDifferenceNumber;
document.getElementById("NodeNumberStart").innerHTML = NodeNumberStart;

//Add the variables to give us the end location of the Node Number
NodeNumberEnd = PageNameLocationNumber + PageLengthNumber + CharacterDifferenceNumber + 3;
document.getElementById("NodeNumberEnd").innerHTML = NodeNumberEnd;

//this gives us the Node Number that we want
NodeNumber = TextFromDemoFramesetNodesJS.substring(NodeNumberStart, NodeNumberEnd);
document.getElementById("NodeNumber").innerHTML = NodeNumber;

}
 var avar=Number(window.NodeNumber);

 //window.NodeNumber;

function loadSynchPage(linkID) {
var folderObj;
docObj = parent.treeframe.findObj(linkID);
docObj.forceOpeningOfAncestorFolders();
parent.treeframe.HightlightNode(linkID,docObj.link,'basefrm');
if (typeof parent.treeframe.document.body != "undefined") // To handle scrolling not working with NS4
parent.treeframe.document.body.scrollTop=docObj.navObj.offsetTop

}


//myvar=Number(NodeNumber);


// function loadnode(){
// document.getElementById('loadSynchPage').onclick=function(){loadSynchPage(myvar);};  

//   var myvar=15;
//function init(){
//    document.getElementById('EditBanner').onclick=function(){EditBanner(myvar);};
// }
</script>
</head>

<BODY>

<button onclick="javascript:settingvariables();">Page Highlight1</button>
<button onclick="javascript:loadSynchPage(avar);">Page Highlight2</button>


Page Name: <p id="PageName"></p>
Page Name String: <p id="PageNameString"></p>
Page Length: <p id="PageLength"></p>
Character Difference: <p id="CharacterDifference"></p>
Page Name Location: <p id="PageNameLocation"></p>
Character Difference Number:<p id="CharacterDifferenceNumber"></p>
Node Number Start: <p id="NodeNumberStart"></p>
Node Number End: <p id="NodeNumberEnd"></p>
Node Number: <p id="NodeNumber"></p>

正如你从底部附近的“//”看到的,我已经尝试了一些与 stackoverflow 上其他问题不同的方法 - 我确信我已经尝试了所有方法,但缺少一些非常简单的东西:/ 在w3说这将允许它们成为全局变量之后,我还在设置诸如PageName和NodeNumber之类的东西之前取出了“var”?

提供更多信息:

该代码基于 TreeView - 它有一个树,左侧有节点,单击节点可在右侧框架中打开页面。但是,单击从右侧页面中的页面到其他页面的链接不会更新节点上的突出显示,这就是我尝试执行此操作(加载)的原因。

编辑:如果可能的话,我还想将代码放入外部 .js 中并引用它,因为我有多个页面(我上周用不同的工作代码尝试了几个小时,但也无法获得这也可以工作)。

最佳答案

您所需要的是:

window.onload = function() {
    loadSynchPage(NodeNumber);
};

或者 body 标记中的 onload,您遇到的问题是它在此代码段中的沙箱中不起作用:

Uncaught SecurityError: Sandbox access violation: Blocked a frame at "http://stacksnippets.net" from accessing a frame at "http://stackoverflow.com". The frame requesting access is sandboxed and lacks the "allow-same-origin" flag.

function variables() {
//Getting the page's name from the URL
PageName = location.pathname.split("/").slice(-1);
document.getElementById("PageName").innerHTML = PageName;

//Converting the page name into a string
PageNameString = String(PageName);
document.getElementById("PageNameString").innerHTML = PageNameString;

//Converting the string of the page name, into it's length
PageLength = PageNameString.length;
document.getElementById("PageLength").innerHTML = PageLength;

//Setting the DemoFramesetNodes.js as a variable (Copy and Paste in - needs to have no " and be on one line)
TextFromDemoFramesetNodesJS = "foldersTree = gFld(<i>Page 1 Title</i>, page1.htm)//000foldersTree.treeID = Framesetaux1 = insFld(foldersTree, gFld(Page 2 Title, page 2.htm)) //001insDoc(aux1, gLnk(R, Page 3 Title, Page3.htm)) //002aux1 = insFld(foldersTree, gFld(Page 4 Title, Page4.htm)) //003insDoc(aux1, gLnk(R, Page 5 Title, Page5.htm)) //004";
//Need to set the difference BETWEEN the "m" in htm and the start of the number
//e.g. page2.htm)) //001
CharacterDifference = "5";
document.getElementById("CharacterDifference").innerHTML = CharacterDifference;

//Need to find the location of the page's name from the DemoFramsetNodes
PageNameLocation = TextFromDemoFramesetNodesJS.lastIndexOf(PageNameString);
document.getElementById("PageNameLocation").innerHTML = PageNameLocation;

//Need to convert all variables to be added into numbers
PageNameLocationNumber = Number(PageNameLocation);
PageLengthNumber = Number(PageLength);
CharacterDifferenceNumber = Number(CharacterDifference);
document.getElementById("CharacterDifferenceNumber").innerHTML = CharacterDifferenceNumber;

//Add the variables to give us the start location of the Node Number
NodeNumberStart = PageNameLocationNumber + PageLengthNumber + CharacterDifferenceNumber;
document.getElementById("NodeNumberStart").innerHTML = NodeNumberStart;

//Add the variables to give us the end location of the Node Number
NodeNumberEnd = PageNameLocationNumber + PageLengthNumber + CharacterDifferenceNumber + 3;
document.getElementById("NodeNumberEnd").innerHTML = NodeNumberEnd;

//this gives us the Node Number that we want
NodeNumber = TextFromDemoFramesetNodesJS.substring(NodeNumberStart, NodeNumberEnd);
document.getElementById("NodeNumber").innerHTML = NodeNumber;

}
 var avar=Number(window.NodeNumber);

 //window.NodeNumber;

function loadSynchPage(linkID) {
  alert("loadSynchPage called");
  var folderObj;
  docObj = parent.treeframe.findObj(linkID);
  docObj.forceOpeningOfAncestorFolders();
  parent.treeframe.HightlightNode(linkID,docObj.link,'basefrm');
  if (typeof parent.treeframe.document.body != "undefined") // To handle scrolling not working with NS4
    parent.treeframe.document.body.scrollTop=docObj.navObj.offsetTop
}


loadSynchPage(NodeNumber);

//myvar=Number(NodeNumber);


// function loadnode(){
// document.getElementById('loadSynchPage').onclick=function(){loadSynchPage(myvar);};  

//   var myvar=15;
//function init(){
//    document.getElementById('EditBanner').onclick=function(){EditBanner(myvar);};
// }
<button onclick="javascript:settingvariables();">Page Highlight1</button>
<button onclick="javascript:loadSynchPage(avar);">Page Highlight2</button>


Page Name: <p id="PageName"></p>
Page Name String: <p id="PageNameString"></p>
Page Length: <p id="PageLength"></p>
Character Difference: <p id="CharacterDifference"></p>
Page Name Location: <p id="PageNameLocation"></p>
Character Difference Number:<p id="CharacterDifferenceNumber"></p>
Node Number Start: <p id="NodeNumberStart"></p>
Node Number End: <p id="NodeNumberEnd"></p>
Node Number: <p id="NodeNumber"></p>

第二个问题:将所有脚本(不包括<script>标签)保存到myjs.js,并将其放在page.html旁边的同一目录中,并删除整个<script>阻止 html,并用它代替它:

<script src="myjs.js"></script>

关于Javascript:插入变量作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35275166/

相关文章:

html - z-index 不显示父项后面的嵌套子项

html - 强制 IE10 中的 HTML 页面使用 IE Quirks 模式

html - 动态更新css类属性

javascript - 我应该怎么做才能替换:hover to something clickable

javascript - React 期望一个赋值或函数调用,但看到一个表达式

javascript - UIWebView:你能禁用 Javascript 吗?

html - 伪元素上的 Font Awesome 5 显示正方形而不是图标

javascript - 将文本输入值更新到段落中的问题

javascript - Magento Rotator 中的 CDATA 问题

javascript - 查找将 $lt 和 $gt 与 javascript 日期一起使用