【问题标题】:How to do following mask input problem?如何做以下掩码输入问题?
【发布时间】:2010-11-17 19:18:17
【问题描述】:

我有一个脚本来屏蔽一个文本框,在这里它

<script src="http://jquery-joshbush.googlecode.com/
files/jquery.maskedinput-1.2.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery(function($) {

      $('#j').mask('99:99');
         });
</script>

我还有一个脚本可以在我单击按钮时动态添加文本框

<script type="text/javascript">
    function addRow(tableID) {

                var table = document.getElementById(tableID);

                var rowCount = table.rows.length;
                var row = table.insertRow(rowCount);

                var colCount = table.rows[0].cells.length;

                for(var i=0; i<colCount; i++) {

                    var newcell = row.insertCell(i);

                    newcell.innerHTML = table.rows[0].cells[i].innerHTML;
                    //alert(newcell.childNodes);
                    switch(newcell.childNodes[0].type) {
                        case "text":
                                newcell.childNodes[0].value = "";
                                newcell.childNodes[0].id="j";
                                alert(newcell.childNodes[0].id);
                                break;
                        case "checkbox":
                                newcell.childNodes[0].checked = false;
                                break;
                        case "select-one":
                                newcell.childNodes[0].selectedIndex = 0;
                                break;
                    }
                }
            }

            function deleteRow(tableID) {
                try {
                var table = document.getElementById(tableID);
                var rowCount = table.rows.length;

                for(var i=0; i<rowCount; i++) {
                    var row = table.rows[i];
                    var chkbox = row.cells[0].childNodes[0];
                    if(null != chkbox &amp;&amp; true == chkbox.checked) {
                        if(rowCount <= 1) {
                            alert("Cannot delete all the rows.");
                            break;
                        }
                        table.deleteRow(i);
                        rowCount--;
                        i--;
                    }


                }
                }catch(e) {
                    alert(e);
                }
            }
    </script>

而我的输入框是

<INPUT type="text" name="STime[]" id="j"/>

我现在面临的问题是,第一个文本框将具有蒙版结构,但是在我借助 j 脚本动态添加文本框后,我不会将文本框设为蒙版?为什么?我做错了什么?

【问题讨论】:

  • 请注意,您的 HTML 元素的 id 属性应该是唯一的。你永远不应该有两个具有相同 ID 的输入元素。改用 Class 并分配一个通用的类名。
  • 我不明白??你能给我一个样品吗??

标签: javascript jquery jquery-plugins


【解决方案1】:

使用您所定位的类创建与输入的事件绑定(如果不需要,请不要使用 ID)。使用jQuery .on 方法http://api.jquery.com/on/

例子:

<input class="classSelector" />

<script>  
  $(document).on("focus", "classSelector", function() { 
    $(this).mask("99:99");
  });
</script>

您可以动态创建任意数量的输入,并使用 on 事件绑定对其进行屏蔽。您创建的该类的每个新输入都会附加该事件处理程序。

【讨论】:

  • 工作就像一个魅力!
  • 成功了!谢谢
【解决方案2】:

使用livequery plug-in。 然后给出你想要屏蔽类maskme的所有元素。现在你可以这样做了:

$(".maskme").livequery(function(){
    $(this).mask('99:99');
});

这将屏蔽即使在代码首次运行之后添加的输入。

【讨论】:

  • 我对 .live() 函数摸不着头脑,认为没有合适的事件。感谢您的发布,我学到了一些东西':)
  • 嘿,它适用于第一个文本框,但它不适用于动态生成的文本框。
  • @Alex - 应该可以。动态添加的文本元素是否也有 `class="maskme" ?
  • 是的,我这样做了....但不工作.....newcell.childNodes[0].class="j";名称="ETime[]" class="j"
  • @Alex - 在我发布代码之前尝试运行 jQuery.livequery.registerPlugin("addRow")。如果这不起作用,我唯一的其他建议是切换到使用 jQuery 添加新的输入元素而不是纯 javascript。
【解决方案3】:

首先不要在输入中使用 ID

<input type="text" name="STime[]" class="jClass"/>

其次,如果您使用 jQuery,请使用它。这更容易阅读。

<script type="text/javascript">
    function addRow(tableID) {
      var table = $("#" + tableID); //get the table
      var firstRowClone = $("tr:first", table).clone(); //clone the first row
      $("input:checkbox",firstRowClone).attr("checked", false);  // set all checkboxes to unchecked
      $("select", firstRowClone).each(function () { //Set all select lists to select first item
        this.selectedIndex = 0;
      }
      table.append(firstRowClone); //append the cloned row to the table.
      $("input:text", firstRowClone).val("").mask("99:99"); //set all input type="text" with value of "" and sets the mask on the clone.

    });

    function deleteRow(tableID) {
      $("#" + tableId + " tr:not(:eq(0))").remove(); //Remove all rows except the first row.         
    }


    $(document).ready(function {
      $('.jClass').mask('99:99'); //sets the mask on any rows loaded initially
    });

</script>

【讨论】:

  • 是的,假设 addRow 是唯一添加需要屏蔽的新文本元素的地方,它可能就是这样。很好的建议。
  • @alex ...我编辑了上面的代码....不同之处在于将克隆的行附加到 DOM 后应用掩码。但是,如果您说什么不起作用,那真的会很有帮助。 “它不起作用”的说法根本没有帮助。请提供更多细节。
【解决方案4】:

掩码插件不会实时绑定到 DOM 中的新元素,而是绑定到 $('#j') 选择器中的现有元素。

  1. 使用类而不是 ID(因为您不能合法地在页面上拥有两个具有相同 ID 的元素),并且
  2. 如有必要,在添加到 DOM 后,在动态创建的元素上重新调用 .mask()

【讨论】:

  • 我不明白??你能给我一个样品吗??
【解决方案5】:

不要在脚本中使用 Id 使用类在 php 中进行多用途时间掩码 ghj

【讨论】:

  • 请考虑在您的回答中添加一些解释和细节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
相关资源
最近更新 更多