2010-11-17 29 views
6

tôi đang có một kịch bản để che dấu một textbox, ở đây nó nóLàm cách nào để thực hiện vấn đề nhập mặt nạ sau?

<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> 

tôi cũng đang gặp một kịch bản để tự động thêm hộp văn bản trong khi tôi bấm một nút

<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> 

và hộp đầu vào của tôi là

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

vấn đề tôi đang phải đối mặt với hiện nay là, hộp văn bản đầu tiên sẽ có một đeo mặt nạ cấu trúc, nhưng sau khi tôi thêm một hộp văn bản động với sự giúp đỡ của kịch bản j, tôi sẽ không nhận được hộp văn bản như đeo mặt nạ? tôi đã làm sai điều gì?

+2

Chỉ cần lưu ý thuộc tính id của các phần tử HTML của bạn phải là duy nhất. bạn không bao giờ nên có hai yếu tố đầu vào với cùng một Id. Sử dụng Lớp thay thế và chỉ định một tên lớp chung. –

+0

Tôi không hiểu điều đó ?? u có thể cho tôi một mẫu ?? –

Trả lời

4

Sử dụng livequery plug-in. Sau đó cung cấp tất cả các yếu tố bạn muốn che mặt cho lớp maskme. Bây giờ bạn có thể làm:

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

Điều này sẽ che dấu đầu vào được thêm ngay cả sau khi mã được chạy lần đầu.

+0

Tôi đã gãi đầu với hàm .live(), nghĩ rằng không có sự kiện thích hợp cho việc này. Cảm ơn bạn đã đăng bài, tôi đã học được điều gì đó ”:) –

+0

Hey, nó hoạt động trên các hộp văn bản đầu tiên, nhưng nó không hoạt động trên hộp văn bản được tạo động. –

+0

@Alex - Nên hoạt động. Các phần tử văn bản được thêm động cũng có 'class =" maskme "? – Adam

0

Trình cắm thêm mặt nạ không ràng buộc trực tiếp với các phần tử mới trong DOM, mà là ràng buộc với phần tử tồn tại từ bộ chọn $ ('# j') của bạn.

  1. Sử dụng một lớp thay vì một ID (vì bạn không thể hợp pháp có hai yếu tố với id cùng trên trang), và
  2. Nếu cần thiết, lại gọi .mask() trên các yếu tố tạo động cho bạn sau khi thêm vào DOM.
+0

Tôi không hiểu điều đó ?? u có thể cho tôi một mẫu ?? –

3

Đầu tiên Dont sử dụng ID trên đầu vào

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

Thứ hai nếu bạn sử dụng jQuery sau đó sử dụng nó. Điều này dễ đọc hơn nhiều.

<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> 
+0

@ Matt Matthew .... Livequery là không cần thiết vì mã trên sẽ hoạt động. –

+0

Đúng, giả sử rằng addRow là nơi duy nhất bổ sung thêm các thành phần văn bản mới cần được che dấu, có thể là nó. Đề nghị rất tốt. – Adam

+0

nó không hoạt động .... :( –

16

Tạo sự kiện ràng buộc với đầu vào với lớp học (không sử dụng ID nếu bạn không phải) bạn đang nhắm mục tiêu. Sử dụng jQuery .Trên phương pháp http://api.jquery.com/on/

Ví dụ:

<input class="classSelector" /> 

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

Bạn có thể tự động tạo bao nhiêu trong những đầu vào mà bạn muốn và mặt nạ họ bằng cách sử dụng về sự kiện ràng buộc. Mỗi đầu vào mới với lớp mà bạn tạo sẽ nhận được trình xử lý sự kiện đó gắn liền với nó.

+0

Với tính năng thích hợp 'sống' hoạt động tốt! – Zanoldor

+0

Làm việc như một sự quyến rũ! –

+0

Đã hoạt động! –

Các vấn đề liên quan