2016-04-11 3 views
-1

Навсегда мы используем функции javascript для передачи данных из таблицы во все, что нам нужно делать с этой строкой данных. Так, например, взять эту таблицу:Использование JQuery вместо функций для доступа к данным из таблицы

<table class="table table-hover table-striped"> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>Action</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>Jack</td> 
      <td><a href="javascript:myfunc(1,'Jack')">edit</a></td> 
     </tr> 
     <tr> 
      <td>Dan</td> 
      <td><a href="javascript:myfunc(2, 'Dan')">edit</a></td> 
     </tr> 
     <tr> 
      <td>Mark</td> 
      <td><a href="javascript:myfunc(3, 'Mark')">edit</a></td> 
     </tr> 
    </tbody> 
</table> 

Обычно, мы просто имеем следующую функцию, чтобы сделать что-то с данными, который изменяется по строкам (как правило, передавая идентификатор, но иногда может быть куча аргументов в функция). Эта функция может делать разнообразие для вещей - не только эти примеры, конечно.

function myfunc(f_ID, f_Name) { 
    alert(f_ID + "_" + f_Name); 
    $.colorbox({ iframe: true, overlayClose: true, opacity: .70, inline: false, fixed: true, title: "Colorbox Title", href: "/mypage.asp?id=" + f_ID + "&name=" + f_Name }); 
} 

ИЛИ

function myfunc(f_ID, f_Name) { 
    if (confirm("Are you sure that you would like to permanently delete id # " + f_ID + " for " + f_Name + "?")) { 
     window.location = "/mypage.asp?id=" + f_ID + "&name=" + f_Name 
    } 
} 

Я знаю, что это, вероятно, не лучший смешивать Jquery и старой школы JS, как это (возможно, это нормально ??), так что должен быть лучший способ получить доступ к этому данные.

Я думал, что могу использовать теги «data-», но проблема в том, как вы действительно получаете значение при наличии нескольких строк? Я не могу использовать идентификатор, поскольку он уникален, и если я добавил класс, как мне получить доступ к данным из этого вызова?

Любая помощь будет принята с благодарностью, спасибо!

UPDATE

Это работало как ответ на мой sitaution. Спасибо @Quentin!

<a class="testlink" href="#" data-id="1234">edit</a> 

$("a.testlink").on("click", myAction); 
function myAction(event) { 
    event.preventDefault(); 
    alert($(this).data("id")); 
}  
+0

Как мне известно, лучшим способом было бы использовать .closest(). Ниже ссылка определила, что вам нужно. http://stackoverflow.com/questions/14460421/jquery-get-the-contents-of-a-table-row-with-a-button-click – LearningPhase

ответ

1

Первый: выясните, что вы хотите, если JS недоступен.

Обычная связь сделаю.

<a href="/mypage.asp?id=1&amp;name=Jack">edit</a> 

Вам не нужно идентификатор и имя отдельно в вашем коде, вы использовали их в URL, который появляется в самой странице, и вы можете прочитать URL по ссылке непосредственно.

this (в обработчике событий) относится к элементу, который использовался для запуска события.

jQuery(function() { 

    $("a").on("click", openColorBox); 

    function openColorBox(event) { 
     event.preventDefault(); 
     var url = this.href; 
     $.colorbox({ 
      iframe: true, 
      overlayClose: true, 
      opacity: .70, 
      inline: false, 
      fixed: true, 
      title: "Colorbox Title", 
      href: url 
     }); 
    } 

}); 

Если вы действительно необходимо передать дополнительные данные, то вы можете прочитать его из атрибутов данных с помощью:

<a href="/mypage.asp?id=1&amp;name=Jack" data-somedata="foo">edit</a> 

… 
function openColorBox(event) { 
    event.preventDefault(); 
    alert(jQuery(this).data("somedata")); 

... но обходе DOM ...

var name = jQuery(this).parents("tr").find("td:first-child").text(); 

... или с использованием атрибутов предназначенные для конкретных данных, которые вы используете (если они существуют) были бы лучше.

+0

Это будет работать для colorbox - спасибо за публикацию. А что, если Colorbox не было на картинке? Может быть, я просто хочу перейти на страницу (см. Добавленный пример выше) или обработать что-то на странице? Как вы можете получить доступ к «данным-somedata», когда у вас может быть 250 строк данных?Откуда вы знаете, какая кнопка или ссылка для редактирования, в которой была нажата строка? Пример: data-id = "1", data-id = "2" и т. Д. – Dennis

+0

Если вы хотите использовать страницу, используйте ссылку. – Quentin

+0

«обрабатывать что-то на странице» - слишком смутно сказать – Quentin

-1
<table> 
<tr><td id='one'>edit</td></tr> 
</table> 

<script> 
$("#one").click(function(){ 
    //do your stuff here 
}); 
</script> 
+0

это не сработает, так как предполагает статическое число строк и вызов по id. Он может варьироваться от 1 до 1000 или более. – Dennis

Смежные вопросы