3

뷰가있는 테이블과 뷰를 렌더링합니다. 표의 각 행은 편집 할 수있는 객체입니다. 따라서이 표의 마지막 열에는 여러 개의 '수정'버튼이 있습니다. 이 EDIT 버튼 중 하나를 클릭하면 JavaScript 함수는 현재 행이 나타내는 객체의 ID를 가져와야합니다. 궁극적으로, 나는 "onclick", "onmouseover"속성이 없으며 사용자 정의 속성이없는 깨끗한 HTML로 끝내기를 원합니다. 아래에는 2 가지 예가 있습니다. 좋은 아이디어있어?서버 개체의 매개 변수를 JavaScript로 전달하는 가장 좋은 방법

예 1

View.aspx

<td> 
    <input type="button" value="EDIT" onclick="JSFunction(<%: ObjectId %>)" /> 
</td> 

스크립트

function JSFunction(id) 
{ 
    //some code that does whatever with id 
} 

예 2

View.aspx

<td> 
    <input type="button" value="EDIT" customAttribute="<%: ObjectId %>" /> 
</td> 

자바 스크립트

$('input[type=button]').click(function() { 
    var id = this.attr('customAttribute'); 
    //some code that does whatever with id 
}); 

P.S. 더 나은 질문 제목을 제안 할 수 있다면 함께 공유하십시오 :)

+0

어디에서 customAttribute 데이터를 저장 하시겠습니까?어디 있는지 알게되면 jQuery를 사용하여 액세스하는 방법을 파악할 수 있습니다. 아니면 데이터를 서버 측에 저장하고 AJAX로 가져 오길 원합니 까? – mrtsherman

+0

사용자 지정 특성은 깨끗한 html로 간주 될 수 있습니다. HTML5 사양에도 있습니다. http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data-with-the-data-attributes – Vadim

+0

@mrtsherman - 내가 원합니다. 클라이언트에서 HTML 서버 측으로 렌더링되도록하려면 JavaScript가 그 값을 획득 할 수 있습니다. – Dimskiy

답변

6

과거에 이것을 처리 한 한 가지 방법은 html5 데이터 속성을 사용하는 것입니다. 어느 버전이 jQuery 1.4.3 이상으로 선택되었는지.

<table> 
    <tr class="row" data-rowInfo='{"Id": "1", "Name": "Jon"}'> 
     <td> 
      Row Id 1 
     </td> 
     <td> 
      <input type="button" value="Edit"/> 
     </td> 
    </tr> 
    <tr class="row" data-rowInfo='{"Id": "2", "Name": "Mark"}'> 
     <td> 
      Row Id 2 
     </td> 
     <td> 
      <input type="button" value="Edit"/> 
     </td> 
    </tr> 
    <tfoot> 
     <tr> 
      <td></td> 
     </tr> 
    </tfoot> 
</table> 

는 그런 다음 JQuery와에 다음과 같은 작업을 수행 할 수있는 데이터를 사용하여

$("input[type=button]").click(function(){ 
    var rowInfo = $(this).parents("tr.row").data("rowInfo"); 
    //Do something with rowInfo.Id; 
}); 

방금 ​​속성보다 더 많은 정보를 포함 할 수있는 풍부한 JSON 객체를 가질 수 있습니다 때문이다. 또한 모든 관련 정보를 저장할 하나의 데이터 속성 만 선언하면됩니다.

이 작업의 예는 jsfiddle입니다.

+0

이전에는 JavaScript로만 데이터 속성을 사용하고 있었지만 실제로는 사용했습니다. 이것이 HTML/aspx로 구축하는 올바른 방법입니까? 이 요소를 FireBug하면 데이터 속성이 보유하고있는 것을 볼 수 있습니까? – Dimskiy

+0

+1 나는 이런 식으로 대답하려했으나 공평하고 정교하게 나를 이겼다. – jimmystormig

+0

@Dimskiy https://addons.mozilla.org/en-us를 사용하여 Firebug에서 데이터 요소를 검사 할 수 있다고 생각한다./firefox/addon/firequery/ – jimmystormig

1

나는 서버에서 ID를 <tr> 태그로 렌더링해야합니다. 자신의 속성을 구성하거나 저장할 수 있습니다. id 속성에 있습니다. 그런 다음 td 안에 편집 버튼이있는 경우 <tr> 태그에 저장된 id를 찾기 위해 jQuery를 작성하면됩니다.

HTML :

<tr myId="1"> 
<td> 
    <input type="button" value="EDIT" /> 
</td> 
</tr> 

jQuery를 :

$(function() { 
     $("input[type=button]").click(function() { 
      var id = $(this).parent().attr("myId"); 
     }); 
    }); 

내가 저장 버튼을 가지고 나는 보통 (자신의 유형을 선택하기보다는 내 편집 버튼에 "편집"의 클래스를 지정하지만 페이지에서).

+0

감사합니다. 나는 보통 수업도 함께갑니다. 단순성을 위해 게시하지 않았습니다. 그러면 매개 변수가 1 개 이상 있으면 어떻게합니까? 그들을 1 개의 끈으로 찌르고 분리 문자에 근거를 두는 JavaScript로 분석 하십시요? 서버 : <% : Id + "|" + OtherParam %> – Dimskiy

+0

@Dimskiy, 하나 이상의 매개 변수가있는 경우 Marks 응답과 함께 갈 것입니다. –

0

jQuery 메타 데이터 플러그인을 사용하면 모든 요소에 다양한 방식으로 데이터를 임베드 할 수 있습니다. 일반적인 방법은 다음과 같이 클래스에 추가하는 것입니다.

<input type="button" class="button { objectId : <%: ObjectId %> }" /> 
+0

나는 정말로 내가 필요로하지 않는 한, 플러그인을 사용하지 않으려 고한다. 예를 들어, jQuery UI DatePicker를 직접 구현하는 대신 확실히 사용합니다. 생각해 줘서 고마워! – Dimskiy