Javascript Arrays只是不工作?

时间:2016-03-22 04:08:48

标签: javascript arrays

编辑以包含更多代码和新信息。

<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]);”代码行永远不会触发。检查了名称,地址等变量的值后,它们没有被正确分配。这可以解释为什么数组也没有正确分配。

3 个答案:

答案 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属性设置为Statichttps://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