【问题标题】:Internet explorer and image submitInternet Explorer 和图像提交
【发布时间】:2011-08-17 16:56:12
【问题描述】:

我有一个很大的表单,里面有多个(超过 100 个)提交按钮。我现在使用以下代码:

<input type='image' src='../images/add.png' name='FormDuplicate' value='" . $resInvoices['iProjectID']. "'>

如果我点击这张图片,它可以完美运行.. 在 Chrome 但不是 IE(7 和 8)。在 IE 中单击时,甚至没有传递名称 (FormDuplicate)。

当我快速谷歌时,我发现 IE 不会通过提交图像的value。这让我不得不使用多种形式,但由于技术原因,我无法使用。那么,我有哪些选择?

谢谢。

关于评论的更新

这是完整的&lt;tr&gt;

<tr class='invoice-tr-standard' id='row2' onClick="FormTRClick(event, '2')"><td><input type='checkbox' name='strFormFactuur[]' value='19512' id='chk2'>&nbsp;<img src='../images/link.png' border='0'></td>

  <td><a href='project_details.php?projectID=19512' target='_blank'>Project</a></td>

  <td>Jobinfo</td>

  <td>Customer</td>

  <td><input type='text' name='FormTextStrPOnummer' value='324'> <img src='../images/b_save.png' border='0' height='13px' style='cursor: pointer;'></td>

  <td>€ <input type='text' name='FormTextFltBedrag'  value='999.000'> <img src='../images/b_save.png' border='0' height='13px' style='cursor: pointer;'></td>

  <td><img src='../images/b_save.png' border='0' height='13px' style='cursor: pointer;'> <input type='image' src='../images/toevoegen.png' border='0' style='float: right; cursor: pointer;' name='FormDupliceer' value='19512'></td>

</tr>

这是当前tr 行的最后一个&lt;td&gt; 元素:

<td><img src='../images/b_save.png' border='0' height='13px' style='cursor: pointer;'> <input type='image' src='../images/toevoegen.png' border='0' style='float: right; cursor: pointer;' name='FormDupliceer' value='19512'></td>

代码未经修改,显示为 HTML 代码。

【问题讨论】:

  • 你能展示最终生成的 HTML,而不是 PHP 原件吗?那个特定的部分似乎不是你的问题,但你永远不知道

标签: php html internet-explorer


【解决方案1】:

IE只会传递坐标,所以在Request集合中查找FormDuplicate.xFormDuplicate.y,如果存在,则表示FormDuplicate图像被点击。

类似:

if(isset($_POST['FormDuplicate.x'])) {
    //submitted by FormDuplicate
}

据我所见,其他浏览器也发送这个(除了发送值),所以它应该可以跨浏览器工作。

编辑:要保留并传递点击图像的值,请将此 JavaScript 代码添加到页面:

window.onload = function() {
    var arrInputs = document.getElementsByTagName("input");
    for (var i = 0; i < arrInputs.length; i++) {
        var oInput = arrInputs[i];
        if (oInput.type == "image") {
            oInput.onclick = function() {
                var oHidden = document.createElement("input");
                oHidden.type = "hidden";
                oHidden.name =this.name;
                oHidden.value = this.value;
                this.form.appendChild(oHidden);
                this.value = "";
            };
        }
    }
};

此代码为所有图像类型的输入动态附加click 事件处理程序,其中它将动态创建隐藏输入,将其名称分配给图像输入的名称并将其值分配给图像输入值,然后将隐藏的输入附加到图像的父窗体,从而正确传递值。
为避免在 FF 或 Chrome 等浏览器中出现重复值,代码会在附加隐藏元素后清除图像输入值。

【讨论】:

  • 好的,我可以确认 IE 确实发送了 FormDuplicate.xFormDuplicate.y,但是我如何通过 IE 传递我当前在 &lt;input type='image' value='1234'&gt; 中的值?隐藏字段不起作用,因为所有内容都在一个 &lt;form&gt; 中。
  • 优秀。相当讨厌的把戏,但它有效(无论如何它必须是一个) - 所以谢谢!
  • 干杯 - 太多次开发人员需要为 IE 糟糕的设计找到非优雅的解决方法。 :p
猜你喜欢
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2012-09-10
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多