编辑以包含更多代码和新信息。
<asp:Table ID="Table1" runat="server" BorderWidth="2px" CellSpacing="2" GridLines="Both" Width="465px">
<asp:TableRow ID="labelRow0" runat="server">
<asp:TableCell runat="server">Name</asp:TableCell>
<asp:TableCell runat="server">Address</asp:TableCell>
</asp:TableRow>
<asp:TableRow ID="inputRow0" runat="server">
<asp:TableCell ID="inputName" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></asp:TableCell>
<asp:TableCell ID="inputAddress" runat="server">
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></asp:TableCell>
</asp:TableRow>
<asp:TableRow ID="labelRow1" runat="server">
<asp:TableCell runat="server">Favourite Colour</asp:TableCell>
<asp:TableCell runat="server">Favourite Number</asp:TableCell>
</asp:TableRow>
<asp:TableRow ID="inputRow1" runat="server">
<asp:TableCell ID="inputColour" runat="server">
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox></asp:TableCell>
<asp:TableCell ID="inputNumber" runat="server">
<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox></asp:TableCell>
</asp:TableRow>
</asp:Table>
<asp:Button ID="buttonScramble" runat="server" Text="Scramble Info" onClientClick="return buttonScramble()" />
</div>
<script>
function buttonScramble() {
var name = document.getElementById("TextBox1").value;
var address = document.getElementById("TextBox2").value;
var colour = document.getElementById("TextBox3").value;
var number = document.getElementById("TextBox4").value;
alert(name, address, colour, number);
var arr = [name, address, colour, number];
alert(arr[0]);
//alert(arr[0], arr[1], arr[2], arr[3]);
arr.shuffle(arr);
alert(arr[0], arr[1], arr[2], arr[3]);
document.getElementById("TextBox1").value = arr[0];
document.getElementById("TextBox2").value = arr[1];
document.getElementById("TextBox3").value = arr[2];
document.getElementById("TextBox4").value = arr[3];
}
“警报(arr [0]);”代码行永远不会触发。检查了名称,地址等变量的值后,它们没有被正确分配。这可以解释为什么数组也没有正确分配。
答案 0 :(得分:1)
ASP.NET Web窗体WebControl因<asp: ID=""
属性与预期呈现的内容不匹配而臭名昭着,因为ASP.NET会将id=""
属性重写为页面上的唯一属性(这是必要的,因为客户端id
在HTML中必须是唯一的,但如果在ID=""
或重新使用的UserControl中呈现,则具有自己的<asp:Repeater
属性的单个WebControl可能会重复多次
查看您的浏览器的JavaScript控制台和JavaScript调试器 - 您可能会看到类似于&#34;无法访问null或未定义的属性value
的内容。因为getElementById
返回null。
将您的JavaScript / ASP.NET更改为:
var textBox1Id = "<%= this.TextBox1.ClientID ";
var textBox1 = document.getElementById( textBox1Id );
我打赌它会被渲染成这样的东西:
var textBox1Id = "__ctrl0_form0_foo_bar_textBox1";
另一种选择是将ClientIDMode
属性设置为Static
(https://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396)
<asp:TextBox runat="server" ID="textBox1" ClientIDMode="Static" />
...但这意味着在您网页上的每个控件上设置该属性。
答案 1 :(得分:0)
可能是您可以将值包装到像这样的对象
中但请确保所有来自dom的值都未定义或为null。
var arr = [{value:name}, {value:address}, {value:colour}, {value:number}];
console.log(arr[0]["value"]);
和这一个
<button ID="buttonScramble" onClick="buttonScramble()">Scramble Info</button>
答案 2 :(得分:0)
采用JavaScript Object Literal,我假设您的代码很好地呈现并传递给Xhtml 客户端,ids TextBox1,TextBox2被分配给输入/表单元素。
示例:
In [188]: tmp=np.arange(6.).reshape(2,3)
In [189]: lol=lambda first, second: np.sum(first)/second