Используя аргумент (this), переданный через элемент eventhandler - PullRequest
0 голосов
/ 18 мая 2010

Я хочу использовать аргумент, который я передаю (this) в функцию JS, и рассматривать его как переменную jQuery. Пример:

<script>    
function useMe(obj){
  $(obj).val();
  ...
  ... 
  ...
}
</script>


<select id="selectid" onChange="useMe(this)">
    <option>......</option>
</select>

Есть ли возможность трактовать переданный аргумент как элемент jQuery?

Btw. Мне нужно сделать это таким образом, потому что элемент select не создается при загрузке. Выбранный элемент будет создан позже асинхронно.

Итак, это не сработает:

$("select").each(function (i){
    var select_id = $(this).attr("id");                
    $(this).change(function(e){  

потому что он еще не существует.

Спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 18 мая 2010

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

$('select').live('change',function(){
  // ...
});

Это свяжет определенную функцию с событием изменения на каждом существующем и на каждом новом элементе выбора.

Обновление : для этого вам нужен как минимум jQuery 1.4.1

0 голосов
/ 18 мая 2010

Если вы решите придерживаться атрибута onchange (против которого я бы посоветовал), просто используйте:

<script>    
function useMe($obj){
  $obj.val();
  ...
  ... 
  ...
}
</script>

<select id="selectid" onChange="useMe($(this))">
    <option>......</option>
</select>
0 голосов
/ 18 мая 2010

Если элемент не существует при загрузке документа, это означает, что он добавляется позже, возможно, с помощью вызова AJAX. Если это так, просто введите регистрацию дескриптора change в обратный вызов success.

$.ajax({
    url: '/somescript',
    success: function() {
        // some code that injects the select into the DOM
        // ...
        $("select").each(function(i) {
            var select_id = $(this).attr("id");                
            $(this).change(function(e) {
                // ...
            });
        });
    }
});
...