簡體   English   中英

使用哪個jquery事件?

[英]Which jquery event to use?

當有一個復選框被標記時,我有一個這樣的代碼來啟用或禁用som文本輸入。

$(document).ready(function(){
    $(":checkbox").change(function(){
        if(this.checked){
            $("input:text").attr('disabled', true);
        } else {
            $("input:text").attr('disabled', false);
        }
      });
});

當用戶點擊復選框時,它似乎有效,但javascript可以通過調用來更改復選框值:

$(":checkbox").attr('checked', true); 

當javascript更改復選框時,不會觸發事件。 我嘗試過click()事件但是發生了同樣的事情。

任何的想法?

謝謝。

首先,讓我們減少那些事件處理程序,因為你將布爾值傳遞給.attr('disabled', bool)並且.checked是一個布爾值,讓我們利用它,如下所示:

$(function(){
  $(":checkbox").change(function(){
    $("input:text").attr('disabled', this.checked);
  });
});

然后以編程方式更改值時,也會觸發change事件,如下所示:

$(":checkbox").attr('checked', true).change();

沒有參數的.change().trigger("change")的快捷方式,這將導致您的事件處理程序運行。

手動調用change事件:

$(":checkbox").change();

很抱歉,如果我太簡單了,但是當你更改復選框值時,你不能讓JavaScript手動調用該事件嗎?

您可以嘗試手動觸發事件:

$(":checkbox").attr('checked', true);
$(":checkbox").change();

要么

$(":checkbox").attr('checked', true).change();

您可以手動將.trigger() change event

$('input:checkbox').trigger('change');

你永遠不應該使用像:checkbox這樣的選擇器。 它是通用*選擇器的隱式用法,它將查詢您站點上的所有節點,這非常糟糕,這意味着它非常慢。

input:checkbox仍將查詢所有復選框元素,您應該使用classid來查詢特定元素。

參考: .trigger()

我不知道為什么通過javascript更改復選框不會觸發事件。 但是,我有一個解決方案。

使

function(){
        if(this.checked){
            $("input:text").attr('disabled', true);
        } else {
            $("input:text").attr('disabled', false);
        }
      }

作為一個功能。 比如函數cb_change_handler(){...}和u可以在通過javascript更改值時手動使用此函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM