在html属性中嵌入javascript

时间:2015-07-09 22:38:27

标签: javascript html

我有以下代码,

<li>
  <button id="javascript:var id_btn1 = 'id' + Math.random().toString(16).slice(2);" 
      class="btn btn-primary helpful">
    <i class="fa fa-thumbs-up"></i>
    Helpful
    <p id="javascript:var id_count1 = 'id' + Math.random().toString(16).slice(2);"
      class="btn btn-primary helpful" ></p>
  </button>
</li>

我想知道这段代码是否正确(语法)。这不能正常工作。

2 个答案:

答案 0 :(得分:0)

我认为您正在尝试动态构建列表。 这是一个使用React的粗略实现(因为它使这很容易):

import React from 'react';
export class YourList extends React.Component {
  makeId() {
    return 'id' + Math.random().toString(16).slice(2);
  }
  renderItem() {
    return (
      <li>
        <a id={this.makeId()} className="btn btn-primary helpful">
          <i className="fa fa-thumbs-up"></i>
          Helpful
          <p id={this.makeId()} className="..."></p>
        </a>
      </li>
    );
  }
  render() {
    return <ul>{this.props.items.map(renderItem, this)}</ul>;
  }
}

将子元素放入<button>并不是一个好主意,因此我使用了<a>;看起来你正在使用Bootstrap,所以它会起作用。

答案 1 :(得分:0)

好的,让我试着理解你想要的东西......

下面

<button id="javascript:var id_btn1 = 'id' + Math.random().toString(16).slice(2);">

您正在尝试声明一个名为id_btn1的变量,该变量包含以下值Math.random().toString(16).slice(2);。好吧,假设它是可能的(它不是)...在特定地方声明变量并不意味着它的值将被打印在那里。

你应该做的是编写没有id属性的HTML元素:

<ul id="myList">
  <li>
    <button id="" class="btn btn-primary helpful">
      <i class="fa fa-thumbs-up"></i>
      Helpful
      <p id="" class="btn btn-primary helpful" ></p>
    </button>
  </li>
</ul>

然后选择列表并为每个P和Button后代生成一个id值。像这样:

function generateIds() {
    var list = document.getElementById('myList');
    var ps = list.getElementsByTagName("p");
    var btns = list.getElementsByTagName("button");

    for (var i = 0; i < ps.length; i++) {
        ps[i].setAttribute('id', Math.random().toString(16).slice(2));
    }

    for (var i = 0; i < btns.length; i++) {
         btns[i].setAttribute('id', Math.random().toString(16).slice(2));
    }
}

然后将generateIds()函数附加到<body>元素的onload事件:

<body onload="generateIds()">

在这个小提琴上抓一个战利品http://jsfiddle.net/fnpo41pu/