비활성화된 입력 요소를 고려하여 $.serialize()를 만드는 방법은 무엇입니까?
기본적으로 비활성화된 입력 요소는 다음과 같이 무시됩니다.$.serialize()
. 해결할 방법이 있습니까?
일시적으로 활성화합니다.
var myform = $('#myform');
// Find disabled inputs, and remove the "disabled" attribute
var disabled = myform.find(':input:disabled').removeAttr('disabled');
// serialize the form
var serialized = myform.serialize();
// re-disabled the set of inputs that you previously enabled
disabled.attr('disabled','disabled');
비활성화된 입력 대신 읽기 전용 입력 사용:
<input name='hello_world' type='text' value='hello world' readonly />
이는 serialize()에 의해 픽업되어야 합니다.
프록시 함수를 사용할 수 있습니다(두 함수 모두에 영향을 미침).$.serializeArray()
그리고.$.serialize()
):
(function($){
var proxy = $.fn.serializeArray;
$.fn.serializeArray = function(){
var inputs = this.find(':disabled');
inputs.prop('disabled', false);
var serialized = proxy.apply( this, arguments );
inputs.prop('disabled', true);
return serialized;
};
})(jQuery);
@user113716이 핵심 답변을 제공했습니다.여기서 제가 기여한 바는 jQuery nice에 함수를 추가한 것입니다.
/**
* Alternative method to serialize a form with disabled inputs
*/
$.fn.serializeIncludeDisabled = function () {
let disabled = this.find(":input:disabled").removeAttr("disabled");
let serialized = this.serialize();
disabled.attr("disabled", "disabled");
return serialized;
};
사용 예시:
$("form").serializeIncludeDisabled();
시도해 보기:
<input type="checkbox" name="_key" value="value" disabled="" />
<input type="hidden" name="key" value="value"/>
몇 가지 해결책을 볼 수는 있지만, 아무도 당신만의 직렬화 기능을 쓰라고 제안하지 않았습니까?여기 있습니다: https://jsfiddle.net/Lnag9kbc/
var data = [];
// here, we will find all inputs (including textareas, selects etc)
// to find just disabled, add ":disabled" to find()
$("#myform").find(':input').each(function(){
var name = $(this).attr('name');
var val = $(this).val();
//is name defined?
if(typeof name !== typeof undefined && name !== false && typeof val !== typeof undefined)
{
//checkboxes needs to be checked:
if( !$(this).is("input[type=checkbox]") || $(this).prop('checked'))
data += (data==""?"":"&")+encodeURIComponent(name)+"="+encodeURIComponent(val);
}
});
비활성화된 입력 요소는 W3C 표준에 따라 사용되지 않아야 하므로 직렬화되지 않습니다. jQuery는 일부 브라우저에서는 사용되지 않지만 표준을 준수하고 있습니다.비활성화된 필드와 동일한 값의 숨김 필드를 추가하거나 jQuery를 통해 이 작업을 수행하여 이를 해결할 수 있습니다.
$('#myform').submit(function() {
$(this).children('input[hiddeninputname]').val($(this).children('input:disabled').val());
$.post($(this).attr('url'), $(this).serialize, null, 'html');
});
둘 이상의 입력이 비활성화된 경우 일치하는 선택기 등을 반복해야 합니다.
다른 사용자가 활성화하지 않으려는 경우 다시 비활성화할 수 있습니다(직렬화에 의해 선택되지 않은 비활성화 필드에서 수정했습니다).플러그인 사용에서 일반 기능 사용에 이르기까지 배열:
function getcomment(item)
{
var data = $(item).serializeArray();
$(':disabled[name]',item).each(function(){
data.push({name: item.name,value: $(item).val()});
});
return data;
}
이렇게 부를 수 있습니다.
getcomment("#formsp .disabledfield");
애런 휴든 바로 앞:
입력(예: select)이 아닌 다른 것이 있을 수도 있습니다. 그래서 변경했습니다.
this.find(":input:disabled")
로.
this.find(":disabled")
언급URL : https://stackoverflow.com/questions/4748655/how-do-i-make-serialize-take-into-account-those-disabled-input-elements
'programing' 카테고리의 다른 글
MySQL은 그룹 다음에 null이 아닌 첫 번째 값을 가져옵니다. (0) | 2023.09.08 |
---|---|
NodeJS - MySQL(Callback) Connections를 MariaDB(Promise/async-wait)로 업데이트해야 합니까? (0) | 2023.09.08 |
PowerShell에서 DateTime을 UNIX 시간으로 변환하려면 어떻게 해야 합니까? (0) | 2023.09.08 |
어떻게 하면 최소한의 오버헤드로 간단한 서버리스 p2p 브라우저를 브라우저 메시징에 구현할 수 있습니까? (0) | 2023.09.08 |
MySQL 클라이언트에 대한 자동 커밋을 해제하려면 어떻게 해야 합니까? (0) | 2023.09.08 |