在Safari中无法将输入类型日期动态更改为来自JavaScript的电子邮件

普里亚

我正在尝试将输入类型日期更改为电子邮件,并将用户单击按钮时的电子邮件更改为日期。

下面是我的HTML代码。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Date Polyfill</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div id="email-to-date">
        <label>Email to Date:</label>
        <input type="email" name="emailDate" id="emailDate">
        <button id="btn-submit">Click me</button>
    </div>
    
    <script src="script.js"></script>
    <script src="node_modules/date-input-polyfill/date-input-polyfill.dist.js"></script>
</body>
</html> 

JavaScript代码

document.querySelector("#btn-submit").addEventListener("click", function () {
    var elem_type = document.querySelector("#emailDate").type;
    var email_elem = document.querySelector("#emailDate");
    
    if(elem_type == 'email')
    { 
       email_elem.type = 'date';
    }
    else { 
      email_elem.type = 'email';
    }
});

它在chrome中非常有效,但是当我在Safari中尝试使用此功能时,只要用户单击更改为日期的按钮电子邮件字段,反之亦然,但是即使是电子邮件字段,在单击输入文本框时它也会显示日期选择器。

尚未完全更改为电子邮件字段。

为了支持Safari中的日期字段,我使用了date-input-polyfill包。

请帮助我解决这个问题。

斯瑞·库玛(Sree Kumar)

我认为,要使其在所有浏览器中都能正常运行,您可能必须删除DOM元素,然后添加具有所需输入类型的新元素。

document.getElementById( "emailDate" ).remove();

然后创建一个新元素,并将其添加到原始父元素中。因此,您更改的功能可能看起来像这样。(这有点冗长,但是我这样保留了它,以便使逻辑清晰可见。)

document.querySelector("#btn-submit").addEventListener("click", function () {
    var email_elem = document.querySelector("#emailDate");
    var elem_type = email_elem.type;
    
    /* Remove the current node, so that we create space for the new one. */
    email_elem.remove();
    
    /* Create the new input DOM node. */
    let newInput = document.createElement( "input" );
    
    /* Create attribute nodes for "id", "name" and "type" (and whatever else you need). We already know the
     * values for "id" and "name"; so we can set them here itself. Only for "type" we need an if..else. */
    let idAttr = document.createAttribute( "id" );
    idAttr.value = "emailDate";
    let nameAttr = document.createAttribute( "name" );
    nameAttr.value = "emailDate";
    let typeAttr = document.createAttribute( "type" );
    
    if( elem_type == 'email' )
    { 
       /* Add date type */
       typeAttr.value = "date";
    }
    else { 
       /* Add email type */
       typeAttr.value = "email";
    }
    
    /* Set the attribute nodes onto the new DOM element. */
    newInput.setAttributeNode( idAttr );
    newInput.setAttributeNode( nameAttr );
    newInput.setAttributeNode( typeAttr );
    
    /* Append the new DOM element as a child of the original parent node. */
    let parent = document.getElementById( "email-to-date" );
    parent.appendChild( newInput );
});

您将面临一个显示顺序更改的问题,您必须使用CSS或使用parent.insertBefore()控制它parent.insertAfter()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以在没有JavaScript的情况下将形式输入类型从文本更改为wtforms中的电子邮件?

来自分类Dev

电子邮件类型输入:如果电子邮件错误或正确,则动态更改按钮的颜色/文本

来自分类Dev

将默认的Safari电子邮件客户端更改为Gmail

来自分类Dev

JS-在Safari中无法将输入类型更改为FILE

来自分类Dev

将 HEADER 电子邮件更改为自定义电子邮件

来自分类Dev

如何将实际位置更改为临时位置,在来自 MySQL 的 Python 电子邮件表上的 csv 文件中添加标题和删除空间?

来自分类Dev

无法将电子邮件发送到laravel 5中动态的电子邮件发件人

来自分类Dev

将输入类型文件(HTML)转换为JavaScript并使用PHPmailer发送电子邮件

来自分类Dev

如何在Javascript中重置电子邮件输入类型选择器?

来自分类Dev

使用 Angular 从输入类型的电子邮件中获取价值

来自分类Dev

无法将分配的默认值更改为日期 angularjs 类型的输入

来自分类Dev

无法从电子邮件输入中获取值

来自分类Dev

WooCommerce - 我们如何将订单电子邮件中的送货地址更改为 N/A?

来自分类Dev

如何在Excel / VBA中通过电子邮件将工作表发送给自己(根据打开的Outlook帐户动态更改电子邮件)

来自分类Dev

无法更改Mailboxer中的电子邮件模板

来自分类Dev

如何在Swift中将UITextField键盘类型更改为电子邮件

来自分类Dev

登录表单已更改,用户名已更改为电子邮件,自动完成功能将继续输入已保存的电子邮件

来自分类Dev

登录表单已更改,用户名已更改为电子邮件,自动完成功能将继续输入已保存的电子邮件

来自分类Dev

无法使用MailKit将图像嵌入电子邮件中

来自分类Dev

Mailboxer将接收者从用户的电子邮件更改为用户的名称RoR 4

来自分类Dev

暂时将时区更改为电子邮件收件人的时区

来自分类Dev

Mailboxer将接收者从用户的电子邮件更改为用户的名称RoR 4

来自分类Dev

无法将 varchar 列更改为日期类型

来自分类Dev

我如何根据这个 javascript 库访问 usernameField 并将其值更改为电子邮件?

来自分类Dev

要将首选应用程序中的电子邮件应用程序更改为GMail?

来自分类Dev

如何将动态日期添加到 Foundation 2 电子邮件?

来自分类Dev

如何将输入类型更改为Javascript中的纯文本

来自分类Dev

在 Laravel 中将我的用户表列“电子邮件”更改为“电子邮件”并将“密码”更改为“密码”

来自分类Dev

Alfresco中的电子邮件模板更改

Related 相关文章

  1. 1

    是否可以在没有JavaScript的情况下将形式输入类型从文本更改为wtforms中的电子邮件?

  2. 2

    电子邮件类型输入:如果电子邮件错误或正确,则动态更改按钮的颜色/文本

  3. 3

    将默认的Safari电子邮件客户端更改为Gmail

  4. 4

    JS-在Safari中无法将输入类型更改为FILE

  5. 5

    将 HEADER 电子邮件更改为自定义电子邮件

  6. 6

    如何将实际位置更改为临时位置,在来自 MySQL 的 Python 电子邮件表上的 csv 文件中添加标题和删除空间?

  7. 7

    无法将电子邮件发送到laravel 5中动态的电子邮件发件人

  8. 8

    将输入类型文件(HTML)转换为JavaScript并使用PHPmailer发送电子邮件

  9. 9

    如何在Javascript中重置电子邮件输入类型选择器?

  10. 10

    使用 Angular 从输入类型的电子邮件中获取价值

  11. 11

    无法将分配的默认值更改为日期 angularjs 类型的输入

  12. 12

    无法从电子邮件输入中获取值

  13. 13

    WooCommerce - 我们如何将订单电子邮件中的送货地址更改为 N/A?

  14. 14

    如何在Excel / VBA中通过电子邮件将工作表发送给自己(根据打开的Outlook帐户动态更改电子邮件)

  15. 15

    无法更改Mailboxer中的电子邮件模板

  16. 16

    如何在Swift中将UITextField键盘类型更改为电子邮件

  17. 17

    登录表单已更改,用户名已更改为电子邮件,自动完成功能将继续输入已保存的电子邮件

  18. 18

    登录表单已更改,用户名已更改为电子邮件,自动完成功能将继续输入已保存的电子邮件

  19. 19

    无法使用MailKit将图像嵌入电子邮件中

  20. 20

    Mailboxer将接收者从用户的电子邮件更改为用户的名称RoR 4

  21. 21

    暂时将时区更改为电子邮件收件人的时区

  22. 22

    Mailboxer将接收者从用户的电子邮件更改为用户的名称RoR 4

  23. 23

    无法将 varchar 列更改为日期类型

  24. 24

    我如何根据这个 javascript 库访问 usernameField 并将其值更改为电子邮件?

  25. 25

    要将首选应用程序中的电子邮件应用程序更改为GMail?

  26. 26

    如何将动态日期添加到 Foundation 2 电子邮件?

  27. 27

    如何将输入类型更改为Javascript中的纯文本

  28. 28

    在 Laravel 中将我的用户表列“电子邮件”更改为“电子邮件”并将“密码”更改为“密码”

  29. 29

    Alfresco中的电子邮件模板更改

热门标签

归档