带有onclick函数的HTML输入字符串有两个参数 - 不工作

时间:2017-09-19 14:00:48

标签: javascript jquery html

如果问题措辞不好,我很抱歉,我不确定如何描述。

我有一个按钮,点击后会执行此操作:

function Save(id, projectID) {
        var url = "@Url.Content("~/Config/Detail?id=")" + id + "&projectID=" + projectID;
    var _options = {
        area: ['590px', '385px'],
        content: url
    }
    tools.openTopPage(_options);
};

如果我在第二行手动输入idproject ID的值,则可以正常输入,因此我知道此功能没有问题。

但是,当从输入字符串调用该函数时,它不起作用。

字符串在这里(放入htmlArray):

    htmlArray.push(
    "<td class='text-center'>
       <input type='button' class='form-btn' value='修改' 
           onclick=Save(" + item.id + ", " + item.projectID + ") />
       <input type='button' id='btn-delete' class='form-btn'
           value='删除' onclick=Delete(" + item.id + ") />
    </td>");

我认为问题是由于输入字符串断开的方式以及将变量item.iditem.projectID放入Save()函数,但是如果我保留它就不会起作用很简单。例如,以下内容不起作用:

htmlArray.push(
    "<td class='text-center'>
       <input type='button' class='form-btn' value='修改' 
           onclick=Save(6, 3) />
       <input type='button' id='btn-delete' class='form-btn'
           value='删除' onclick=Delete(" + item.id + ") />
    </td>");

我使用的值6和3是使用item.iditem.projectID时我希望给出的值。

最有趣的是,在两种情况下,HTML在浏览器中呈现相同的内容。结果如下:

enter image description here

所以问题肯定在Save()函数周围,但我不知道在哪里。

如果我简化Save()函数只采用一个参数就可以了(例如"Save(" + item.id + ")"可以正常工作),所以这就是让我相信它在处理两个参数时搞砸的原因

任何输入都非常感谢,谢谢。

4 个答案:

答案 0 :(得分:5)

尝试

onclick="save('6','3')"
6之后

,提出问题

尝试

onclick="save('6','3')"
6之后

,提出问题

'在JavaScript中出现问题

最后一个选项是:

var parameters=String("'" + item.id + "','"+item.projectID+"'");

将其用作

htmlArray.push(
    "<td class='text-center'>
       <input type='button' class='form-btn' value='修改' 

           onclick=Save("+parameters+") />

       <input type='button' id='btn-delete' class='form-btn'
           value='删除' onclick=Delete(" + item.id + ") />
    </td>");

看起来很愚蠢,但我多次使用它。

如果有其他选择,欢迎!!!

答案 1 :(得分:1)

https://jsfiddle.net/6h73pxcv/

<input type='button' class='form-btn' value='修改' onclick="Save(6, 3)" />

onclick需要有引号。还要确保“保存()”全局可用

答案 2 :(得分:1)

如果你的问题是多参数,为什么不只使用一个和威胁项作为对象?因此,不要破坏项目,而是可以传递所有内容。

function Save(item) {
        var url = "@Url.Content("~/Config/Detail?id=")" + item.id + "&projectID=" + item.projectID;
    var _options = {
        area: ['590px', '385px'],
        content: url
    }
    tools.openTopPage(_options);
};

并在htmlArray中:

htmlArray.push(
    "<td class='text-center'>
       <input type='button' class='form-btn' value='修改' 
           onclick=Save(" + item + ") />
       <input type='button' id='btn-delete' class='form-btn'
           value='删除' onclick=Delete(" + item.id + ") />
    </td>");

我知道这不是你想要的,而是另一种思考方式,可以进一步帮助你。

<强>更新

也许如果你在htmlArray中切换一些单引号和双引号,你可能会实现你的目标。

htmlArray.push(
        '<td class="text-center">
           <input type="button" class="form-btn" value="修改" 
               onclick="Save(' + item + ')" />
           <input type="button" id="btn-delete" class="form-btn"
               value="删除" onclick="Delete(' + item.id + ')" />
        </td>');

答案 3 :(得分:0)

您可以使用ES6标准

来解决问题
htmlArray.push(
  `<td class='text-center'>
     <input type='button' class='form-btn' value='修改' 
       onclick="Save('${item.id}, '${item.projectID}');" />
     <input type='button' id='btn-delete' class='form-btn'
       value='删除' onclick="Delete('${item.id}');" />
  </td>`);

希望这会对你有所帮助。