10/10/2018, 09:52

Xử lý tất cả control trong form trong 1 vòng lặp

Trong form của mình có khoảng 100 textbox có name lần lượt là text1 -> text100.
Mình muốn trong 1 sự kiện nào đó, thay đổi đồng loạt giá trị cả 100 textbox này thì phải làm sao?

Mình tạo mảng từ myArray[1] đến myArray[100] có giá trị là từ text1 đến text100. Sau đó trong vòng lặp mình dùng form.myArray[i].value=.... nhưng không có kết quả
QuanN viết 11:57 ngày 10/10/2018
Dùng jQuery:

Code:
$(#buttonId).click(function() {
    $(':text').val("cái gì đó");
});
Đại khái như thế, tôi chưa thử nghiệm.
SVPro viết 12:04 ngày 10/10/2018
Đang hỏi về JS thuần, k hỏi về framework nào cả?
thuyduongcd viết 12:08 ngày 10/10/2018
Tại sao lại đặt nó text1 tới text 100 mà không đặt nó là 1 mảng
Code:
<script language="javascript">
function changeall(value){
var ob=document.getElementByName("mytextbox");
for (var i=0; i<ob.length;i++){
    ob[i].value=value[i];
}
}
</script>
<form>
<input type="text" name="mytextbox" />
<input type="text" name="mytextbox" />
.....
<input type="text" name="mytextbox" />
</form>
<a href="javscript:changeall(...)">change to 2</a>
SVPro viết 11:56 ngày 10/10/2018
Được gửi bởi thuyduongcd
Tại sao lại đặt nó text1 tới text 100 mà không đặt nó là 1 mảng
Code:
<script language="javascript">
function changeall(value){
var ob=document.getElementByName("mytextbox");
for (var i=0; i<ob.length;i++){
    ob[i].value=value[i];
}
}
</script>
<form>
<input type="text" name="mytextbox" />
<input type="text" name="mytextbox" />
.....
<input type="text" name="mytextbox" />
</form>
<a href="javscript:changeall(...)">change to 2</a>
Bởi vì cần phải truyền các giá trị từ các textbox này qua $_POST cho trang xử lý
Với lại chỉ ví dụ là 100 textbox này thay đổi đồng loạt cho mọi người dễ hình dung thôi, chứ thực ra không phải thay đổi giống nhau, nên cần 1 textbox là 1 name khác nhau
Mahakaruna viết 11:56 ngày 10/10/2018
Được gửi bởi SVPro
Bởi vì cần phải truyền các giá trị từ các textbox này qua $_POST cho trang xử lý
Với lại chỉ ví dụ là 100 textbox này thay đổi đồng loạt cho mọi người dễ hình dung thôi, chứ thực ra không phải thay đổi giống nhau, nên cần 1 textbox là 1 name khác nhau
Thế này :

for (i=1; i<=100; i++)
{
document.forms['formName']['text'+i].value = 'New val';
}
trinhdiep viết 11:58 ngày 10/10/2018
bạn đổi đồng loạt 100 tbx giá trị giống nhau hay khác nhau chứ.
mình nghĩ cách thuyduongcd trên là ổn

Code:
function getTextBox(ele){
        var result =new Array();
        //truth textbox
        if(ele.tagName=='input' && ele.type=='text'){
            result.push(ele);
            return result;
        }
        //truth container
        if(ele.hasChildNodes){
        for(var i = 0;i<ele.childNodes.length;i++)
        {
           var child=getTextBox(ele.childNodes[i]);
           while (child.length>0){
            result.push(child.pop());
           }
        }
        return result;
        }
        //other, return empty array.
        return result;
        }
//
var textArray=getTextBox(document.getElementById('form_post_id'))
for(var i=0;i<textArray.length;i++)
  textArray[i].value=value;
thuyduongcd viết 12:05 ngày 10/10/2018
Được gửi bởi SVPro
Bởi vì cần phải truyền các giá trị từ các textbox này qua $_POST cho trang xử lý
Với lại chỉ ví dụ là 100 textbox này thay đổi đồng loạt cho mọi người dễ hình dung thôi, chứ thực ra không phải thay đổi giống nhau, nên cần 1 textbox là 1 name khác nhau
1. Cần phải đọc kỹ code một chút.
Code:
ob[i].value=value[i];
Làm gì có chuyện thay đổi nội dung giống nhau. Mỗi text box sẽ nhận 1 giá trị tương ứng của mảng truyền vào.

2. Dùng chung 1 tên thì truyền đến trang xử lý cũng có vấn đề gì đâu.
Code:
echo $_POST['textboxname'][$i];
3. Nếu bạn vẫn giữ ý định dùng tên khác thì chỉ có cách này
Code:
<form id="myForm">
</form>
<script>
var x=document.getElementById("myForm");
for (var i=0;i<x.length;i++)
  {
  var el=x.elements[i];
  if (el.type=="textbox"){
       el.value="new value";
  }
  }
</script>
SVPro viết 11:55 ngày 10/10/2018
Được gửi bởi thuyduongcd
2. Dùng chung 1 tên thì truyền đến trang xử lý cũng có vấn đề gì đâu.
Code:
echo $_POST['textboxname'][$i];
Ok, cảm ơn nhé, nhưng xin thêm vào là textbox phải có name dạng textboxname[] mới truyền qua POST như trên được

Mà khi name có dạng textboxname[] thì ob[i].value=value[i] không còn được nữa!
thuyduongcd viết 11:56 ngày 10/10/2018
Có gì khó đâu.
Chỉ cần sửa lại chỗ này:
Code:
var ob=document.getElementByName("mytextbox[]");
Vậy là OK thôi
Bài liên quan
0