나는 ie 11을 사용하고 있습니다. 테이블에 행을 추가하고 있습니다. 모달 팝업을 사용하여 데이터를 입력하고 AJAX 호출을 통해 기본 데이터를 업데이트하고 있습니다. 이 작업이 완료되면 JQuery를 사용하여 테이블에 행을 추가합니다. 이것은 한 가지를 제외하고는 모두 잘 작동합니다. 테이블 행의 끝에는 버튼이 있습니다. 테이블의 다른 모든 버튼은 작동하지만 새 버튼은 작동하지 않습니다. 개발자 도구를 살펴보면 새 행의 버튼이 다른 행의 마크 업과 동일한 마크 업을 가지므로 동일한 방식으로 작동해야합니다. 따라서 표는 다음과 같습니다.
<table class="GridTbl" id="surveyList">
<thead>
<tr>
<th>Survey</th>
<th>Contract</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@foreach (var contract in
SessionObjectsMSurvey.ContractList.Where(x => x.SurveyId > 0)
.OrderByDescending(x => x.SurveyCreated))
{
<tr>
<td>@contract.SurveyTitle</td>
<td>@contract.ContractTitle</td>
<td>
<button class="btn btn-xs btn-primary selectContract"
data-msurvey-row-id="@contract.RowId">
Select
</button>
</td>
</tr>
}
</tbody>
</table>
여기에 데이터 행을 추가합니다. 버튼에는 selectContract 클래스가 있습니다. 이것은 작동합니다
var addRowToTable = function (data) {
var row =
'<tr>' +
'<td>{{surveyTitle}}</td>' +
'<td>{{contractTitle}}</td>' +
'<td>' +
'<button class="btn btn-xs btn-primary selectContract" data-msurvey-row-id="{{rowId}}">Select</button>' +
'</td>' +
'</tr>';
//Add row
$('#surveyList').prepend(row.compose({
'surveyTitle': data.SurveyTitle,
'contractTitle': data.ContractTitle,
'rowId': data.RowId
}));
};
그리고 이것은 일반적으로 작동하지만 새 행에서는 작동하지 않는 클릭 이벤트입니다. 새 행의 버튼은 이벤트를 발생시킵니다. 이벤트 핸들러가 어디에 있는지 모르겠습니다. 이건되어야하지만 그렇지 않습니다.
$(".selectContract").on("click", function (e) {
e.preventDefault();
var $this = $(this);
var rowId = $this.data("msurvey-row-id");
var url = GetHiddenField("msurvey-get-contract-and-survey-url");
dataService.getContractAndSurvey(rowId, displayContractInfo, url);
});
설명을 추가하기 위해. on()
이벤트 위임에 이미 사용하고있는 의견에서 다음과 같이 말했습니다 .
$(".selectContract").on("click", function (e) {
하지만 여기서 정확히 무슨 일이 발생합니까? on()
실제로 사용 하고 있지만 해당 코드 블록을 실행할 때 존재하는 선택자에만 해당됩니다 (= 직접 이벤트 바인딩). 또는 그렇지 않으면 다음과 같이 일관된 부모에 on 메서드를 바인딩해야합니다.
$('#surveyList').on("click", ".selectContract", function (e) {
이것은 동적으로 생성 = 이벤트 위임이 될 때마다 #surveyList
클래스 내부 의 모든 요소에 대해 작동합니다 ".selectContract"
.
동적으로 생성 된 요소에 대한 이 이벤트 바인딩을 자세히 살펴 보셨습니까 ?
On()
반드시 이벤트 위임을 의미하지는 않습니다. 와 함께 사용할 수도 있습니다 off()
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다