나는 운없이 한동안이 답변을 찾고 있었기 때문에 질문을 게시 할 것이라고 생각했습니다.
나는 이것에 대해 코딩 할 수 있다고 확신하지만 이것이 왜 작동하지 않는지 이해하고 싶습니다.
이 작은 jQuery 코드가 있습니다.
$("body").on("change", "#StackNameId190", function () {
alert('got it');
});
이 코드를 .js 파일에 포함하면 제대로 작동합니다. 그러나 액세스하는 뷰에 포함하면 그렇지 않습니다.
보기에 유사한 본문 / 변경 스크립트가 있으며 제대로 작동하지만이 스크립트는 작동하지 않습니다. 뷰에서 필요한 이유는 모델의 콘텐츠를 기반으로 스크립트를 동적으로 생성 할 수 있기를 원하기 때문입니다. 최종 결과는 다음과 같습니다.
@foreach (var stack in @Model.Stacks)
{
@Html.Raw(string.Format("$('body').on('change', '#StackNameId{0}', function () {{$('#btnStackName{0}').click(); alert('got it');}});", @stack.Id));
}
내가 이해하지 못하는 것은 왜 이것이 .js 파일에서는 잘 작동하지만 뷰에서는 작동하지 않는다는 것입니다. 영향을 줄 수있는 유일한 것은 ID가 StackNameId190 인 텍스트 상자가 부분보기에서 생성된다는 것입니다. 나는 그것이 영향을 미칠 것인지, 왜 그런지 잘 모르겠습니다. 다음은 jQuery에 액세스하려는 코드입니다.
<div id="submitStackName@(Model.Id)">
@using (Ajax.BeginForm("_SubmitStackName", "Position",
new AjaxOptions
{
UpdateTargetId = String.Format("submitStackName{0}",@Model.Id),
OnFailure = "ajaxFailureHandler",
OnComplete = String.Format("updatedStackName('#{0}')", String.Format("submitStackName{0}", @Model.Id))
}, new { @id = String.Format("StackNameForm{0}", @Model.Id) }))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.Id)
@Html.LabelFor(model => model.Name, new { style = "width:150px" })
@Html.TextBoxFor(model => model.Name, new { style = "width:300px", @id = String.Format("StackNameId{0}", @Model.Id) })
@Html.ValidationMessageFor(model => model.Name)
<button type="submit" id="btnStackName@(Model.Id)" style="display:none"></button>
}
</div>
이것에 대한 어떤 생각이라도 대단히 감사하겠습니다.
문제가 해결되었습니다 ...하지만 왜 해결되었는지 모르겠습니다. _layout.cshtml 파일의 하단에서 body 태그 바로 아래의 파일 상단으로 스크립트 렌더링을 이동했습니다.
왜 이것이 지금 작동하는지 100 % 확실하지 않지만 jQuery가 아직 준비되지 않은 것 같습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다