Jquery-在运行之前禁用'on change'事件处理程序

时间:2013-09-09 23:05:37

标签: javascript jquery

http://jsfiddle.net/B9Fub/

<tr class="fis">
Test: <input type="text" name="test" id="test" value="Test">
<tr class="fis">
Empty: <input type="text" name="empty" id="empty">
<input type="button" value="find" id="find">

$('#find').click(function() {
    alert('wont work if any other fields are filled other than TEST'); 
});

$('#test').change(function() {
    // needs to fill the form for other functionality
    $('#empty').val('empty'); 
    alert('change');
});

所以这里我有第一个输入被'更改'时填充的字段

但如果他们在第一个字段输入并点击“查找”按钮,我不希望它运行[更改]。

我想知道是否有办法做到这一点。根据我的发现,如果点击它,“更改”会发生在“查找”按钮之前。

我已经尝试将“更改”更改为“焦点”并将其提供给其他字段,因此第一个字段没有事件处理程序,但这可能会给我带来麻烦。

我需要填写字段,但如果用户点击查找按钮,我不希望它们被填充。

3 个答案:

答案 0 :(得分:0)

mousedown事件在change事件之前触发,因此通过使用该事件和jQuery的data()方法,您可以设置一个标记,以查看activeElement是否实际上{ {1}}单击查找按钮时,如果是,则不设置值:

#test

FIDDLE

答案 1 :(得分:0)

仍然不确定你想要什么。也许这会有所帮助。

var frm = $('form')[0]; //assuming you have one form on that page
var fnd = $('#find');
fnd.click(function(){
  var te = 0, fe = 0;
  if(frm.elements[0].value !== '')te = 1;
  for(var i=1,l=frm.length; i<l; i++){
    if(frm.elements[i].value !== '')fe = 1;
  }
  if(fe === 1){
    return false;
  }
  else{
    // do your thing here
    return true; // some editors show an error if you don't always return a value
  }
});
$('#test').change(function(){
  if(fnd.val() !== ''){
    return false;
  }
  else{
    // do your thing here
    return true;
  }
});

答案 2 :(得分:0)

我找到了答案。使用e.stopPropagation(); on $('#find')允许我停止发生.change()