v2.5.2
Giriş yap

"Enter" tuşu ile "select" etiketinden sonraki gelen etiketi seçmek istiyorum?

trsherlock
638 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Aşağıdaki kodlara göre normalde sağlıklı çalışıyor fakat "select" etiketine gelince seçim kutusunu açıyor. Ve 3. sütundaki "input" etiketini seçmiyor.
"Enter" tuşu ile "select" etiketinden sonraki etiketi seçebilirim?
Hazır html yapısı için CodePen.io bağlantısı
İlginiz için şimdiden teşekkürler...

$(document).on("keyup",".faturaDetay",function(e){
  var vergisiz = $(this).closest("tr").find("td").eq(0).find('.faturaDetay').val();
  var oran = $(this).closest("tr").find("td").eq(1).find('.faturaDetay').val();
  var kdv = parseInt(vergisiz) * parseInt(oran) / 100;
  $(this).closest("tr").find("td").eq(2).find('.faturaDetay').val(kdv)
  $(this).closest("tr").find("td:last-child").find(".faturaDetay").val(parseInt(vergisiz) + parseInt(kdv))
  if (e.which == 13){
      var tdActiveIndex = $(this).closest("td").index();
      var tdLastIndex = $(this).closest("tr").find("td:last-child").index();
      var trActiveIndex = $(this).closest("tr").index();
      var trLastIndex = $(this).closest("tbody").find("tr:last-child").index();
      if (tdActiveIndex == tdLastIndex && trActiveIndex == trLastIndex)
        {
          var employe;
          employe = '<tr>' +
          '<td><input type="text" name="veri[]" class="faturaDetay"></td>' +
          '<td><input type="text" name="veri[]" class="faturaDetay" value="8"></td>' +
          '<td><input type="text" name="veri[]" class="faturaDetay"></td>' +
          '<td><input type="text" name="veri[]" class="faturaDetay"></td>' +
          '</tr>';
          $("table").append(employe);
          trLastIndex = $(this).closest("tbody").find("tr:last-child").index();
          $("tbody").find("tr").eq(trLastIndex).find(".faturaDetay").eq(0).focus();
        }
        else if (tdActiveIndex != tdLastIndex)
        {
          $(this).closest("td").next('td').find('.faturaDetay').focus().select();
        }else{
          $(this).closest("tr").next('tr').find('.faturaDetay').eq(0).focus().select();
        }
    }
});
Cevap yaz
Cevaplar (6)
trsherlock
1486 gün önce

Teşekkür ederim Tayfun Bey ben sorunu farklı şekilde çözdüm. Sorun keydown ve keyup olaylarından kaynaklanıyormuş.
Enter tuşu ile atlatırken eylem=keyup fakat hesaplatma yaparken eylem=keydown olması gerekiyor.
Select üzerinde atlamam için keydown kullanmam gerekiyormuş.
Ben ise input'a değer girildiğinde hesaplanması için keyup kullanıyordum.
İkisini ayırdım sorun çözüldü.

tayfunerbilen
1487 gün önce

o zaman şunu dener misin

$(".faturaSelectDetay").focus(function(e) {
    $(this).parent().next('td').find('.faturaDetay').focus().select();
    e.preventDefault(); 
});
trsherlock
1487 gün önce

ilginiz için teşekkür ederim fakat sorun hesaplama değil. Sorun Enter tuşu ile td içindeki select'en inputa atlamam gerekiyor
Fakat select problem çıkartıyor. Select'e odaklı iken Enter tuşuna bastığım zaman sonraki inputa atlaması lazım fakat açılır kutuyu hedefliyor.
Ayrıca bahsettiğiniz sorun kdv tutarına değer girdiğinizden değil. Document üzerinde girdiğiniz herhangi bir klavye hareketi kdv hesaplamasını yapıyor. Yani yaşadığım sorun bu değil.
Access Programı ile veritabanında bir tablo oluşturun ve enter tuşu ile sütundan sütuna atlarsınız.
Son sütuna geldiğinizde yeni satıra geçer. Yapmak istediğim sistem de buna benzer olmalı.
Tayfun Bey'in önerisi change yaptım boş forumda iken son index input'u hedeflemişti fakat input select td içinde değildi bir de td içinde deneyeceğim.

makifgokce
1487 gün önce

Anladığım kadarıyla sorun Kdv tutarının olduğu inputta değergirdiğinde direk siliyor.
bunun nedeni

var kdv = parseInt(vergisiz) * parseInt(oran) / 100;
$(this).closest("tr").find("td").eq(2).find('.faturaDetay').val(kdv)

buradaki kdv float değer döndürdüğünden type="number" olan bir inputta sıkıntı çıkarması normal :)

$(this).closest("tr").find("td").eq(2).find('.faturaDetay').val(parseInt(kdv))

bu şekide integer olarak girersen sıkıntı çıkmayacaktır

trsherlock
1488 gün önce

Teşekkür ederim fakat istediğim gibi olmadı.

tayfunerbilen
1489 gün önce

şu kod işine yarayacaktır

$('select').on('change', function(){
  if ($(this).val() != ''){
    $(this).parent().next('td').find('input').focus();
  }
})