2014-06-16 18 views
0

我有這對函數影響兩個輸入和一個選擇。這些獨特的,所以當輸入填充,選擇要修改的選項3選擇有,並選擇除3的任何選項時,兩個輸入必須是空的:jQuery的'更改'方法(用於HTML屬性修改)只能工作一次

$('#ar_filter').on('change', '#ar_fromDate, #ar_toDate', function() { 
     if ($('#ar_fromDate, #ar_toDate').val!=""){ 
      $('.lastDays').attr('readonly','readonly').find('option[value=3]').attr('selected', true); 
     } 
    }); 

$('#ar_filter').on('change', '#lastDays', 'select', function() { 
     if ($('.lastDays').val()!=3){ 
      $('#ar_fromDate, #ar_toDate').val(""); 
     } 
    }); 

這工作,但只有第一次。當我在輸入上寫入一些值時,它將正確復位爲選擇值3,但是當我手動更改選項時,在復位並使輸入保持空白後,即使在寫入任何輸入時也不會重置選擇。

JSFIDDLE EXAMPLE(嘗試通過填充輸入使2個選擇重置:它只會讓第一個)

+0

你真的打算'select'傳遞到處理程序,_data_在你的第二個['。對()'](http://api.jquery.com/on/)結合或你想讓它成爲選擇器的一部分嗎?我認爲你是選擇者是錯誤的。 – War10ck

+0

我不確定我是否低於你的問題。我希望#lastDays選擇這個選擇器,每次從#lastDays中選擇一個選項時執行操作 – Biomehanika

+1

請查看下面的答案,我認爲應該解決您的問題。 – War10ck

回答

1

根據您的jsfiddle,我相信你的第二個實施.on()不正確。第三個可選參數可以作爲數據傳遞給處理函數,如reference documentation中所示。

嘗試改變:

$('#ar_filter').on('change', '#lastDays', 'select', function() { 

這樣的:根據您comment

$('#ar_filter').on('change', '#lastDays', function() { 

上面,我相信你的選擇是錯誤的。 #lastDays<select>元素的id,這是您希望綁定change事件的位置。額外的select是不需要的。

Updated Fiddle

注:

更新的小提琴包括由@tymeJV在他的回答中描述的.val()修復。

編輯:

除了上述.on()選擇修復,你需要打出來的兩個選擇在.val()聲明。這是因爲每次發生更改事件時,只有第一個輸入將被驗證。這直接來自jQuery文檔爲.val()

獲取匹配的元素集合的第一元件的電流值。

第二個值不會被提取或驗證。

更改此:

$('#ar_fromDate, #ar_toDate').val() != "" 

這樣:

$('#ar_fromDate').val() != "" || $('#ar_toDate').val() != "" 

這應該可以解決這個問題。我在下面加入了一個更新的小提琴。爲了未來的訪問者的利益,我已經把原來的小提琴完好地展現出來解決這個問題的步驟。

Complete Fiddle

+0

感謝您的關注。按照您的指示更改.on後,問題仍然存在。在這裏你有jsfiddle:http://jsfiddle.net/nyCKE/4432/ – Biomehanika

+0

在你更新的小提琴上,你可以看到問題如何持續:只需重新設置輸入的任何東西,然後手動選擇任何非3-值選項,然後再次鍵入:它不會重置選擇 – Biomehanika

+0

@Biomehanika它似乎工作正常。當改變你的一個''時,選擇改變爲選項3.當''被清除。期望的行爲是什麼? – War10ck