【问题标题】:HTML <input> element not POSTing value?HTML <input> 元素不发布值?
【发布时间】:2015-12-06 08:05:15
【问题描述】:

好吧,这很奇怪。

据我所知,我的代码是正确的。它适用于 Mac 上的 Safari、iPhone 上的 Safari 和 Android 平板电脑上的 Google Chrome。然而,它不能工作的是 Firefox 或 Internet Explorer。我一辈子都想不通为什么!

问题是这样的:当我单击&lt;input&gt; 标签并提交表单时,该标签的值没有被发布。更奇怪的是,X 和 Y 值 正在 被发布 - 这是一个图像输入标签 - 但没有价值。

以下是相关的 HTML:

<input type='image' name="edit" value="59" class="news-control news-control-hidden" src="assets/edit.png"/></input>

以下是我单击标签时发布的值,作为print_r($_POST) 调用的输出:

Array ( [edit_x] => 29 [edit_y] => 9 )

我的 PHP 网页上有以下代码:

<form name="newsform" method="post" action="Admin.php">
    <table class="editable-list">
<?php
        $entries = get_news_posts();
        if (empty($entries)) {
?>
            <tr><td><p style='margin: 6px 10px 16px 0px'>No news posts exist.<br><br>Click the button below to create one.</p></td></tr>
<?php
        } else
            foreach ($entries as $row) {
                make_editable_news_item($row['date'], $row['content'], $row['ID'], isset($_POST['edit']) ? $_POST['edit'] : null);
            }
        if (!isset($_POST['edit'])) {
?>
            <tr><td class='news-add-post' colspan='7'>
                <input type="submit" name="create_new" value="Create new post"/><br>
            </td></tr>
<?php                       }       ?>
    </table>
</form>

我也有这个功能:

    function make_editable_news_item($datestamp, $content, $id, $editing_id) {
?>
    <tr class="news-item">
        <td class="news-controls">
<?php   if ($id == $editing_id) {       ?>
                <input type='image' class="news-control" src="assets/undo.png"/></input>
<?php       } else if (!isset($editing_id)) {                   ?>
                <input type='image' name="edit" value="<?= $id ?>" class="news-control news-control-hidden" src="assets/edit.png"/></input>
<?php       }       ?>
            &nbsp;
        </td>
        <td class="news-datestamp">
            <?= format_datestamp($datestamp) ?>
<?php   if ($id == $editing_id) {       ?>
                <div style="background-color: #eee; height: 1px; margin: 6px;"></div>
                <div class="news-control-datestamp">
                    <input name='update_date' class="news-control-datestamp" type="checkbox">
                        Update
                    </input>
                </div>
<?php       }       ?>
        </td>
        <td class="news-separator"/>
        <td class="news-divider"/>
        <td class="news-separator"/>
        <td class="news-content">
<?php   if ($id == $editing_id) {       ?>
                <textarea name="content" class="news-content"><?= $content ?></textarea>
<?php   } else {    ?>
                <div class="news-content"><?= $content ?></div>
<?php       }       ?>
        </td>
        <td class="news-separator"/>
        <td class="news-separator"/>
        <td class="news-separator"/>
        <td class="news-controls">
<?php   if ($id == $editing_id) {       ?>
                <input type='image' name='save' value='<?= $id ?>' class="news-control" src="assets/save.png"/></input>
<?php       } else if (!isset($editing_id)) {                   ?>
                <input type='image' name="delete" value="<?= $id ?>" class="news-control news-control-hidden" src="assets/delete.png"/></input>
<?php       }       ?>
            &nbsp;
        </td>
    </tr>
    <tr class="news-separator"></tr>
<?php } ?>

此代码产生以下 HTML:

<form name="newsform" method="post" action="Admin.php">
    <table class="editable-list">
    <tr class="news-item">
        <td class="news-controls">
            <input type='image' name="edit" value="59" class="news-control news-control-hidden" src="assets/edit.png"/></input>
            &nbsp;
        </td>
        <td class="news-datestamp">     5th Dec 2015<br>11:12pm         </td>
        <td class="news-separator"/>
        <td class="news-divider"/>
        <td class="news-separator"/>
        <td class="news-content">
            <div class="news-content">...</div>
        </td>
        <td class="news-separator"/>
        <td class="news-separator"/>
        <td class="news-separator"/>
        <td class="news-controls">
            <input type='image' name="delete" value="59" class="news-control news-control-hidden" src="assets/delete.png"/></input>
            &nbsp;
        </td>
    </tr>
    <tr class="news-separator"></tr>
        <tr><td class='news-add-post' colspan='7'>
            <input type="submit" name="create_new" value="Create new post"/><br>
        </td></tr>
    </table>
</form>

那么问题来了,为什么 Firefox 和 IE 不尊重输入标签的value 属性?

【问题讨论】:

    标签: php html cross-browser


    【解决方案1】:

    图像输入应该用于服务器端图像映射。

    他们不发布他们的值,他们发布(如name.xname.y(PHP 将. 转换为_,因为你不能在变量名中包含.,所以它会失败使用旧的默认注册全局变量))您单击的像素的坐标。

    如果要传递值,请改用常规提交按钮。

    <button name="edit" value="59">
        <img src="assets/edit.png" alt="Edit: 59">
    </button>
    

    【讨论】:

    • 他们肯定会在 Safari 和 Chrome 中发布他们的价值观;)
    • 不幸的是,使用嵌套的
    • 我的 Firefox 副本中没有。 evernote.com/l/AAM8eSAtxJdP-L0HZZOQzOIW4-DZ6fgB_Mw
    • 我愿意。看一下这个。左边是 Firefox,右边是 Safari:dl.dropboxusercontent.com/u/36875370/…
    • 嗯,这很奇怪。我再次刷新页面,它看起来正确。可能是某种缓存问题?无论如何,感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多