2013-05-29 25 views
6

Có thể lấy html của biểu mẫu có thuộc tính giá trị được cập nhật thông qua hàm .html() không?Cách lấy biểu mẫu html() qua jQuery bao gồm các thuộc tính giá trị được cập nhật?

The (giản thể) HTML:

<form> 
    <input type="radio" name="some_radio" value="1" checked="checked"> 
    <input type="radio" name="some_radio" value="2"><br><br> 
    <input type="text" name="some_input" value="Default Value"> 
</form><br> 
<a href="#">Click me</a> 

Các jQuery:

$(document).ready(function() 
{ 
    $('a').on('click', function() { 
     alert($('form').html()); 
    }); 
}); 

Dưới đây là một ví dụ về những gì tôi đang cố gắng để làm: http://jsfiddle.net/brLgC/2/

Sau khi thay đổi giá trị của đầu vào và nhấn "bấm vào tôi" nó vẫn trả về HTML với các giá trị mặc định.

Làm cách nào tôi có thể nhận HTML cập nhật qua jQuery?

+0

Tôi không tin như vậy, vì các giá trị không bao giờ được đặt với JS, chúng chỉ được trả lại như những gì chúng được mã hóa cứng như. Bạn luôn có thể sử dụng '.serialize()' – tymeJV

+0

vì bạn đang cảnh báo HTML thực ... những gì bạn nhập không được thêm vào HTML xây dựng trang. có khả năng ull cần phải làm một vòng lặp thông qua mỗi mục, nhận được html và giá trị, và kết hợp nó – PlantTheIdea

Trả lời

6

Nếu bạn thực sự phải có HTML, bạn cần phải thực sự cập nhật "giá trị" thuộc tính bằng tay: http://jsfiddle.net/brLgC/4/

$(document).ready(function() 
{ 
    $('a').on('click', function() { 
     $("input,select,textarea").each(function() { 
      if($(this).is("[type='checkbox']") || $(this).is("[type='checkbox']")) { 
      $(this).attr("checked", $(this).attr("checked")); 
      } 
      else { 
       $(this).attr("value", $(this).val()); 
      } 
     }); 
     alert($('form').html()); 
    }); 
}); 
+0

Tôi đoán đó là giải pháp duy nhất sau đó ... tuy nhiên tôi đoán đó là một chút phức tạp hơn với các nút radio và hộp kiểm ... – santacruz

+0

radio & hộp kiểm. Cùng một hiệu trưởng, ngoại trừ việc sử dụng thuộc tính được kiểm tra thay vì giá trị. Chắc chắn, nó lộn xộn, nhưng gọi .html() bình thường là. – CodingIntrigue

+0

tôi cũng vừa cập nhật fiddle để làm cho nó hoạt động ... http://jsfiddle.net/brLgC/5/ – santacruz

5

câu trả lời RGraham đã không được làm việc cho tôi vì vậy tôi sửa đổi nó để:

$("input, select, textarea").each(function() { 
    var $this = $(this); 

    if ($this.is("[type='radio']") || $this.is("[type='checkbox']")) { 
     if ($this.prop("checked")) { 
      $this.attr("checked", "checked"); 
     } 
    } else { 
     if ($this.is("select")) { 
      $this.find(":selected").attr("selected", "selected"); 
     } else { 
      $this.attr("value", $this.val()); 
     } 
    } 
}); 
+0

tuyệt vời - điều này xử lý các trường không phải văn bản một cách thích hợp – Tahbaza

0

Tác phẩm của Lachlan "gần như" hoàn hảo. Vấn đề là khi biểu mẫu được lưu và sau đó khôi phục, sau đó được lưu lại, đài và hộp kiểm không bỏ chọn và thay vào đó chỉ giữ nguyên. Sửa lỗi đơn giản bên dưới.

$("input, select, textarea").each(function() { 
    var $this = $(this); 

    if ($this.is("[type='radio']") || $this.is("[type='checkbox']")) { 
     if ($this.prop("checked")) { 
      $this.attr("checked", "checked"); 
     } else { 
      $this.removeAttr("checked"); 
     } 
    } else { 
     if ($this.is("select")) { 
      $this.find(":selected").attr("selected", "selected"); 
     } else { 
      $this.attr("value", $this.val()); 
     } 
    } 
}); 
Các vấn đề liên quan